返回NodeJS中MYSQL的布尔值

时间:2017-12-27 14:00:39

标签: mysql node.js

我正在处理一个返回布尔值的函数。此值表示用户是否存在于数据库中。目前我有这个:

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。是否有可能在数据库中没有更改行的值。('?

1 个答案:

答案 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

希望它有所帮助。