微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bcryptjs和mysql问题

如何解决bcryptjs和mysql问题

我想将用户保存在数据库中并创建其密码的哈希,然后将其保存为密码 但是我所有的尝试都导致RangeError:超出了最大调用堆栈大小

这是用户代码

import db from "./db";
import bcrypt from "bcryptjs";

class User {
    constructor(name,surname,login,pass) {
        var user = new User();
        user.name = name;
        user.surname = surname;
        user.login = login;
        user.pass =pass;
    }

    save(cb){
        let sql = "INSERT INTO users(name,hash) VALUE ?";
        let values = [[this.name,this.surname,this.login,this.hash]];
        this.hashPass((result)=>{
            db.query(sql,[values],cb);
        });
    };

    hashPass(pass,cb){
        bcrypt.genSalt(8,(err,salt) => {
            if (err) throw err;
            bcrypt.hash(pass,salt,(result)=>{
                cb(result);
            });
        });
    }

    varification(login,password,cb) {
        bcrypt.compare(pass,hash,result) => {
            cb(result);
        });
    }
}

export default User;

在这里尝试保存用户

router.post('/regist',(req,res)=> {
    let entryData = req.body;

    let newUser = new User(entryData.name,entryData.surname,entryData.login,entryData.password);

    newUser.save((err,result)=> {
        if (err) {
            console.log(err);
        }
        res.json(result);
    });
});

我该如何处理?

解决方法

RangeError的发生是因为User构造函数内部递归调用了User构造函数。尝试删除递归调用:

constructor(name,surname,login,pass) {
    user.name = name;
    user.surname = surname;
    user.login = login;
    user.pass =pass;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。