无法读取属性'密码'在Query._callback Node.js中未定义

时间:2017-07-04 16:15:21

标签: javascript node.js

在实施护照并为后端工作时,我遇到了这个错误。任何人都可以帮我弄清楚如何解决它?

  

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);
            }

          });
      })

    }
));

2 个答案:

答案 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'

的字段