Javascript 没有从NodeJS中的MySQL查询中获取返回对象

Javascript 没有从NodeJS中的MySQL查询中获取返回对象,javascript,mysql,node.js,express,Javascript,Mysql,Node.js,Express,我正在用MySQL数据库在NodeJS中创建一个日志系统。首先,我这样连接: const con = mysql.createConnection({ host : 'localhost', user : 'dbuser', password : 'dbpass', database : 'dbname', port : 3306, multipleStatements : true }); con.query('SELECT * FROM us

我正在用MySQL数据库在NodeJS中创建一个日志系统。首先,我这样连接:

const con = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 'dbpass',
  database : 'dbname',
  port     : 3306,
  multipleStatements : true
});
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
然后,当我执行查询以获取用户数据时,我执行以下查询

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:无法读取未定义的属性“hash”
。有什么建议吗?

事实上,您正在得到结果,但它是异步的。因此,在检查用户的属性
散列时,对象本身尚未加载。您应该将比较放在回调中,如下所示:

const con = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 'dbpass',
  database : 'dbname',
  port     : 3306,
  multipleStatements : true
});
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
        }
    }
});
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

事实上,您正在得到结果,但它是异步的。因此,在检查用户的属性
散列时,对象本身尚未加载。您应该将比较放在回调中,如下所示:

const con = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 'dbpass',
  database : 'dbname',
  port     : 3306,
  multipleStatements : true
});
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