我正在使用promises为用户返回数据进行身份验证,我的解决方案显示在我的.catch中以供我的通话。
调用登录功能;
function(req, username, password, done) {
user.login(username, password).then( function(err, results){
if (err) throw err;
done(null, results.user);
}).catch(
function(err){
console.log("Failed to log in", err);
done(null, false);
}
);
}
这是承诺代码:
exports.login = function(username, password){
return new promise(function(resolve, reject){
var sql = `CALL LOGIN(?)`;
db.conn.query(sql, username, (err, results, fields) => {
if (err) {
reject("SQL ERR:", err);
}
var user = results[0][0];
if (!user.uID) {
reject("Incorrect username");
}
if(bcrypt.compareSync(password, user.pword)){
resolve(user);
} else {
reject('Incorrect password');
}
});
});
}
当调用它时,即使在解析时调用了用户对象也是一个错误...我目前卡住了,我试图重新安装bluebird模块以及它发生的事情。< / p>
答案 0 :(得分:1)
接下来发生了什么:
如果一切正常,您将把用户对象作为参数传递
if (bcrypt.compareSync(password, user.pword)) {
resolve(user);
} else {
reject('Incorrect password');
}
因此,在代码的这一部分.then
中,您将一个用户对象作为唯一参数接收,因此无需检查是否存在错误。
function (req, username, password, done) {
user.login(username, password).then(function(user) {
// a good way to see all arguments is
// console.log(arguments);
done(null, user);
}).catch(
function(err) {
console.log("Failed to log in", err);
done(null, false);
}
);
}