2017-12-27 283 views
0

我正在处理一个函数,它将返回一个布尔值。该值表示用户是否存在于数据库中。目前我有这个:从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(...”

+0

.query接受函数作为其第二个参数,当查询完成时调用该函数。换句话说,在函数作为参数传递给查询之前,原始函数可能会返回。 – Riwen

+0

你在返回之前控制行吗?那是否包含一个? – Deep

+0

如果我在'return rows> 0'之前放置'console.log(rows)',它会给我'1'。但函数返回false – Soccerrlife

回答

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); 
    } 
}); 

编辑

您也可以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

希望它有帮助。

+0

此代码还显示1和false。但接着是相反的。 – Soccerrlife

+0

对不起,请使用回调检查我的编辑(null,rows> 0); – Sparw

+0

非常感谢。然而,函数应该只是由'checkIfExists()'调用,所以我可以在if语句中使用它:'if(checkIfExists()){.....}' – Soccerrlife