我尝试使用关键字this
访问存储在用户实例中的密码,但它不起作用?
以下是我调用它时的代码。
Users.find({where: {$or: [{ email: email} ,{ username: username }]}})
.then(user => {
if (!user) return res.status(401).send(new errors.Unauthorized('Email/Username or Password Not Found!'));
user.authenticate(password, (err, match) => {
if (err) return res.status(401).send(err);
res.send(user);
});
})
.catch(err => res.send(err));
这是我的实例方法的代码。
instanceMethods :{
authenticate: (password, cb) => {
return bcrypt.compare(password, this.password, (err, match) => {
if (err) return cb(new errors.Unauthorized());
return cb(null, match);
});
}
}
答案 0 :(得分:7)
您使用箭头功能,不允许this
通过call()
或apply()
绑定。见MDN:
由于这不受箭头函数的约束,因此方法call()或apply()只能传递参数。这被忽略了。
而且,
如前所述,箭头函数表达式最适合非方法函数......
同时查看此github问题https://github.com/sequelize/sequelize/issues/5858
无法覆盖箭头功能的范围 - 这是其主要功能之一。所以我们在这里无能为力