Javascript 没有从NodeJS中的MySQL查询中获取返回对象
我正在用MySQL数据库在NodeJS中创建一个日志系统。首先,我这样连接: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
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