2017-04-21 61 views
1

我試圖使用關鍵字this訪問存儲在用戶實例中的密碼,它不起作用?Sequelize實例方法不工作?

下面是當我打電話給它的代碼。

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); 
     }); 
     } 
    } 

回答

4

您使用箭頭功能,它不會讓this通過call()apply()的約束。請參閱MDN

由於這不是在箭頭函數中綁定的,所以方法call()或apply()只能在參數中傳遞。這被忽略了。

並進一步

如前所述,箭頭函數表達式是最適合非方法的功能...

看到這個問題的GitHub以及https://github.com/sequelize/sequelize/issues/5858

無法覆蓋箭頭函數的範圍 - 這是他們的主要功能之一。所以我們沒有辦法在這裏做