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 实例方法不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

与 Sequelize 的交易不起作用

Express Sequelize 和 Passport.js 身份验证策略不起作用

Sequelize.authenticate() 对 Docker 内的谷歌云 sql 连接不起作用(没有成功或错误响应)

方法关闭似乎在 ruby​​racer 中不起作用

Apollo 服务器订阅不起作用

SpringBoot异步任务及Async不起作用的原因