Sequelize实例方法不起作用?

时间:2017-04-21 15:33:14

标签: javascript postgresql orm this sequelize.js

我尝试使用关键字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 个答案:

答案 0 :(得分:7)

您使用箭头功能,不允许this通过call()apply()绑定。见MDN

  

由于这不受箭头函数的约束,因此方法call()或apply()只能传递参数。这被忽略了。

而且,

  

如前所述,箭头函数表达式最适合非方法函数......

同时查看此github问题https://github.com/sequelize/sequelize/issues/5858

  

无法覆盖箭头功能的范围 - 这是其主要功能之一。所以我们在这里无能为力