我正在创建nodejs
登录应用并使用passport
js进行身份验证。我使用本地mysql数据库并使用sequelize
作为ORM库。
在我的用户模型中,我创建了通过用户名获取用户。
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)
我该如何解决这个问题?
答案 0 :(得分:1)
你需要像这样更改回调:
callback(null, userObj);
在路由器文件中遇到错误时throw
。在异步调用环境中抛出异常不是一个好习惯。无论如何,你调用findUserByUsername
传递一个回调,期望第一个参数是错误。
在findUserByUsername
中,您将在错误位置返回用户对象。所以你在路由器文件中的逻辑认为它是一个错误。
为了避免这些异常,你不需要抛出异常,在回调函数中返回它们。