【问题标题】:Return boolean value from MYSQL in NodeJS从 NodeJS 中的 MYSQL 返回布尔值
【发布时间】:2017-12-27 14:00:38
【问题描述】:

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

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

这很奇怪,因为只有一个结果,所以 rows 应该等于 1。但是它返回 false 而不是 true。 'database.query(...' 中的行的值是否可能没有改变?

【问题讨论】:

  • .query 接受一个函数作为其第二个参数,在查询完成时调用该函数。换句话说,原始函数可能会在作为参数传递给查询的函数被调用之前返回。
  • 您在返回之前是否对行进行了控制台操作?包含一个吗?
  • 如果我将 'console.log(rows)' 放在'return rows > 0' 之前,它会给我 '1'。但是函数返回false

标签: mysql node.js


【解决方案1】:

因为你的函数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

希望对你有帮助。

【讨论】:

  • 这段代码也显示了1和false。但反过来。
  • 非常感谢。但是该函数应该只由'checkIfExists()'调用,所以我可以在if语句中使用它:'if(checkIfExists()){.....}'
  • 不幸的是,异步函数无法做到这一点:/
猜你喜欢
  • 2021-02-16
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多