Sequelize 实例方法不起作用?
Posted
技术标签:
【中文标题】Sequelize 实例方法不起作用?【英文标题】:Sequelize instance method not working? 【发布时间】:2017-04-21 15:33:14 【问题描述】:我正在尝试使用关键字 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);
);
【问题讨论】:
【参考方案1】:您使用箭头函数,它不会让this
通过call()
或apply()
绑定。见MDN:
由于 this 没有绑定在箭头函数中,方法 call() 或 apply() 只能传入参数。这被忽略了。
还有,
如前所述,箭头函数表达式最适合非方法函数...
也可以查看这个 github 问题 https://github.com/sequelize/sequelize/issues/5858
没有办法覆盖箭头函数的范围 - 这是它们的主要特性之一。所以在这里我们无能为力
【讨论】:
以上是关于Sequelize 实例方法不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Express Sequelize 和 Passport.js 身份验证策略不起作用
Sequelize.authenticate() 对 Docker 内的谷歌云 sql 连接不起作用(没有成功或错误响应)