Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取属性';密码';查询时未定义的值。\u callback Node.js_Javascript_Node.js - Fatal编程技术网

Javascript 无法读取属性';密码';查询时未定义的值。\u callback Node.js

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并为其处理后端时,我遇到了这个错误。有人能帮我弄清楚怎么修吗

TypeError:无法读取未定义的属性“password” 在查询时返回(/Users/oscarstein/Documents/programmering/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);
            }

          });
      })

    }
));

检查数据库中的表是否有一个名为“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
块重写代码,但老实说,它看起来更难看。