我正在使用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
。有什么建议吗?
答案 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