Javascript 无法读取属性';密码';查询时未定义的值。\u callback Node.js
在实现passport并为其处理后端时,我遇到了这个错误。有人能帮我弄清楚怎么修吗 TypeError:无法读取未定义的属性“password” 在查询时返回(/Users/oscarstein/Documents/programmering/express cc/app.js:76:32) 使用以下代码:Javascript 无法读取属性';密码';查询时未定义的值。\u callback Node.js,javascript,node.js,Javascript,Node.js,在实现passport并为其处理后端时,我遇到了这个错误。有人能帮我弄清楚怎么修吗 TypeError:无法读取未定义的属性“password” 在查询时返回(/Users/oscarstein/Documents/programmering/express cc/app.js:76:32) 使用以下代码: passport.use(new LocalStrategy( function(username, password, done) { console.log(userna
passport.use(new LocalStrategy(
function(username, password, done) {
console.log(username);
console.log(password);
const db = require('./db');
db.query('SELECT id, password FROM users WHERE username = ?', [username], function(err, results, fields){
if (err) {done(err)};
if (results.length == 0) {
done(null, false);
}
const hash = results[0].password.toString();
bcrypt.compare(password, hash, function(err, response){
if (response == true) {
return done(null, {user_id: results[0].id});
} else {
return done(null, false);
}
});
})
}
));
检查数据库中的表是否有一个名为“password”的字段。考虑这些代码行
if (err) {done(err)};
if (results.length == 0) {
done(null, false);
}
它检查是否存在错误,然后执行函数done(err)
,函数流继续
然后它检查是否有结果,调用函数done(null,false)
,然后流再次继续
正确的做法是
if (err) {
return done(err)
}
if (results.length == 0) {
return done(null, false);
}
注意上面的返回语句。它将中断此回调函数内部的进一步代码执行。控制台将您的
结果记录在const hash=results[0]的正上方。
行。我猜DB返回的是一个非数组。这应该是一个注释,而不是答案。或者你可以使用if/else
块重写代码,但老实说,它看起来更难看。