最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

返回NodeJS中MYSQL的布尔值

运维笔记admin10浏览0评论

返回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而不是true。是否有可能在'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);
    }
});

编辑

你也可以像这样简化你的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

希望能帮助到你。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论