我正在尝试使用以下代码验证用户:
function validateUser(adminEmailId, adminPassword) {
try{
console.log('email id: '+adminEmailId+' password: '+ adminPassword);
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'somePassword',
database: 'someDatabase'
});
var query = connection.query('select id from AdminData where adminEmail = "'+adminEmailId+'" AND adminPassword = "'+adminPassword+'"');
console.log('query: ' + query);
query.on('error', function(error){
console.log('A db error occurred: '+error);
});
query.on('result', function(result){
console.log('some result: '+ result);
if(result.id === null) {
console.log('user not found');
}
else
{
console.log('user found :)');
}
});
}
catch (ex) {
console.log('some exception ' + ex);
}
}
它在控制台中打印的最后两个日志是 -
email id: d@g.com password: gfdgdf
query: [object Object]
应该打印 -
user not found
// OR
user found :)
我尝试通过在命令行中触发来验证SQL是否正常运行:
mysql -h127.0.0.1 -uroot -p
它向我显示错误:
Command not found
所以我使用下面的命令更新了路径:
export PATH="/usr/local/mysql/bin:$PATH"
然后我可以从命令行使用mysql,但仍然没有在Node.js代码中取得成功:(
有什么建议吗?
答案 0 :(得分:3)
如果您的查询没有导致error
或result
个事件,则表示查询导致空集。您应该监听end
事件,以便了解查询何时执行。然后,您可以在result
上检查的end
事件处理程序中设置一些条件,以查看是否找到了用户。
执行此操作可能更简单的方法是将回调传递给query()
,因为在这种情况下您似乎不需要进行流式传输。类似的东西:
connection.query('select id from AdminData where adminEmail = "'+adminEmailId+'" AND adminPassword = "'+adminPassword+'"', function(err, rows) {
if (err) {
console.log('A db error occurred: ' + err);
return;
}
if (rows && rows.length)
console.log('user found :)');
else
console.log('user not found');
});
另外我应该指出其他一些事情:
mysql
模块当前不支持实际准备好的语句,但mysql2
确实如此。 mysql2
与mysql
API兼容,整体速度更快。validateUser()
参数列表的末尾添加一个回调参数,以便在查询完成后调用回调,从而允许您适当地继续执行代码。否则调用validateUser()
的地方将不知道查询何时完成以及结果是什么。