2016-08-20 53 views
0

我正在創建nodejs登錄應用程序並使用passport js進行身份驗證。我使用本地mysql數據庫並使用sequelize作爲ORM庫。未處理的拒絕 - 護照登錄應用程序節點js

在我的用戶模型中,我創建了用戶名來獲取用戶。

module.exports.findUserByUsername = function(username, callback){ 
    User.findOne({ where: {username: username} }).then(function(user) { 
    var userObj = user.get({plain:true}); 
    callback(userObj); 
    }) 
}; 

在路由器文件

passport.use('login', new LocalStrategy(
    function (username, password, done) { 

     User.findUserByUsername(username, function (err, user) { 
      if(err) { 
       throw err; 
      } 
      console.log(user); 
     }) 
    } 
)); 

我得到一個錯誤Unhandled rejection (<{object_values...>, no stack trace)

我怎樣才能解決這個問題呢?

回答

1

您需要更改回調調用是這樣的:

callback(null, userObj); 

在路由器文件中,您throw時遇到錯誤。在異步調用環境中拋出異常不是一種好的做法。無論如何,你打電話findUserByUsername傳遞一個回調期待第一個參數是錯誤。

findUserByUsername你在錯誤的地方返回用戶對象。所以你在路由器文件中的邏輯認爲這是一個錯誤。

爲避免這些異常,您不必拋出異常,將它們返回回調函數中。

+0

你能解釋一下這個背後的概念嗎? – Shashika