从NodeJS中的MYSQL返回布尔值
我正在处理一个函数,它将返回一个布尔值。该值表示用户是否存在于数据库中。目前我有这个:从NodeJS中的MYSQL返回布尔值
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,而不是真实的。有没有可能是行的值不会改变中“database.query(...”
因为你的函数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);
}
});
编辑
您也可以simlify您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
希望它有帮助。
此代码还显示1和false。但接着是相反的。 – Soccerrlife
对不起,请使用回调检查我的编辑(null,rows> 0); – Sparw
非常感谢。然而,函数应该只是由'checkIfExists()'调用,所以我可以在if语句中使用它:'if(checkIfExists()){.....}' – Soccerrlife
.query接受函数作为其第二个参数,当查询完成时调用该函数。换句话说,在函数作为参数传递给查询之前,原始函数可能会返回。 – Riwen
你在返回之前控制行吗?那是否包含一个? – Deep
如果我在'return rows> 0'之前放置'console.log(rows)',它会给我'1'。但函数返回false – Soccerrlife