无法从NodeJS中的MySQL查询获取返回对象

时间:2018-11-29 10:59:17

标签: javascript mysql node.js express

我正在使用MySQL DB在NodeJS中创建一个日志系统。首先,我进行如下连接:

const con = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 'dbpass',
  database : 'dbname',
  port     : 3306,
  multipleStatements : true
});

然后,当我执行查询以获取用户数据时,我将执行以下查询。

var user;
con.query('SELECT * FROM users WHERE email = ?', email, function(err, rows) {
    if (err) throw err;
    else {
       user = rows[0];
    }
});

但是当我最终比较返回的用户的任何字段时,我得到一个错误:

if (tools.hashPassword(password) == user.hash) {
    // Do stuff
}

错误为TypeError: Cannot read property 'hash' of undefined。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

con.query("SELECT * FROM users WHERE email = ?", email, function (err, rows) {
    if (err) {
        throw err;
    } else {
        if (!rows.length) {
            throw new Error("User not found");
        }
        const user = rows[0];
        if (tools.hashPassword(password) == user.hash) {
            // Do stuff
        }
    }
});

答案 1 :(得分:0)

事实是您正在获得结果,但是它是异步的。因此,在您检查用户的属性hash时,对象本身尚未加载。您应该像这样将比较放在回调中:

con.query('SELECT * FROM users WHERE email = ?', email, function(err, rows) {
  if (err) throw err;
  else {
     if (tools.hashPassword(password) === rows[0].hash) {
        // Do stuff
     }
  }
});

// This stuff happens usually BEFORE the query's callback,
// due to Node.js asynchronous nature