如果查询搜索包含元素,如何返回布尔值?

时间:2016-01-01 23:12:13

标签: javascript mysql json

我有一个客户端将JSON信息发送到服务器并尝试进行注册。 JSON包括此用户的名称和密码。在服务器将注册记录到数据库之前,需要确保用户名可用。为此,我创建了一个名为isRegisted(req)的函数,它在数据库上进行搜索,如果result.length大于零,则将布尔值设置为true,并在函数末尾返回此布尔值。 mysql搜索返回它在“结果”中的预期,但最后没有设置布尔值,并且console.log打印未定义。

这是我的代码:

function register(req , res){
res.setHeader('Content-Type', 'application/json');
console.log(isRegisted(req));
}

function isRegisted(req){
var flag;
var query = conn.query("SELECT * FROM Users WHERE name=?", [  req.body.name ], function(err, result) {
        if(err){
            console.error(err);
            return;
        }
        console.log(result);
        if(result.length > 0)
            flag = true;
        else
            flag = false;
});
return flag;
}

感谢您的关注。

2 个答案:

答案 0 :(得分:0)

您的代码的问题是,您向数据库发出异步请求。函数(错误,结果)将仅在数据库中进行查询后执行。因此,当调用函数(错误,结果)时,您无法确定。因此,在大多数情况下,标志始终未定义,因为数据库尚未执行查询,这会导致未定义的变量标志。绕过这个问题,在函数中做另外的逻辑(错误,结果)。

答案 1 :(得分:-2)

在这种情况下,您有一个异步。函数,所以父函数不等待子函数执行并返回undefined。这样的事情可能对你有用:

        var successFn = function() {console.log('success');},
            errorFn = function() {console.log('error');};
        function register(req , res){
            res.setHeader('Content-Type', 'application/json');
            console.log(isRegisted(req, successFn, errorFn));
        }
        function isRegisted(req, successFn, errorFn){
            var flag;
            var query = conn.query("SELECT * FROM Users WHERE name=?", [      req.body.name ], function(err, result) {
            if(err){
             errorFn();
            }

            if(result.length > 0) {
             successFn();
            }        
    });
    }