我正在处理一个返回布尔值的函数。此值表示用户是否存在于数据库中。目前我有这个:
function checkIfExists(){
var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username);
var rows = 0;
database.query(sql, function(err, result, fields){
console.log(result.length);
rows += result.length;
});
return rows > 0;
}
console.log(checkIfExists());
我使用' console.log(result.length)'验证是否有结果。当我测试一些输入时,我得到了这个:
false
1
这很奇怪,因为有一个结果,所以行应该等于1.但是它返回false而不是true。是否有可能在数据库中没有更改行的值。('?
答案 0 :(得分:0)
因为你的函数checkIfExists
是异步的,我认为你应该像这样使用回调系统:
function checkIfExists(callback) {
var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username);
var rows = 0;
database.query(sql, function (err, result, fields) {
if (err) {
callback(err, null);
}
else {
console.log(result.length);
rows += result.length;
callback(null, rows > 0);
}
});
}
checkIfExists(function(err, isExists) {
if (err) {
// An error occured
}
else {
console.log(isExists);
}
});
修改强>
您也可以像这样简化checkIfExists
功能:
function checkIfExists(callback) {
var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username);
database.query(sql, function (err, result) {
callback(err, result ? result.length > 0 : false);
});
}
更多信息: Understanding Async Programming in Node.js
希望它有所帮助。