在实施护照并为后端工作时,我遇到了这个错误。任何人都可以帮我弄清楚如何解决它?
TypeError:无法读取属性'密码'未定义的 在Query._callback(/Users/oscarstein/Documents/Programering/express-cc/app.js:76:32)
使用以下代码:
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);
}
});
})
}
));
答案 0 :(得分:1)
考虑这些代码行
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);
}
注意上面的返回语句。它打破了这个回调函数内部的进一步代码执行。
答案 1 :(得分:-1)
检查数据库中的表是否有一个名为' password'
的字段