2016-08-20 48 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