问题描述
我想将用户保存在数据库中并创建其密码的哈希,然后将其保存为密码 但是我所有的尝试都导致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;
}