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

How to return a boolean if a query search has elements?

本文关键字:返回 布尔值 何返回 搜索 查询 包含 元素 如果      更新时间:2023-09-26

我有一个客户端向服务器发送JSON信息,并尝试注册。JSON包括该用户的名称和密码。在服务器向数据库中注册之前,它需要确保用户名可用。为此,我创建了一个名为isRegisterd(req)的函数,该函数对数据库进行搜索,如果result.length大于零,则将布尔值设置为true,并在函数末尾返回该布尔值。mysql搜索在"result"中返回预期的结果,但最后没有设置布尔值,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;
}

感谢您的关注。

代码的问题是,您向数据库发出异步请求。只有在数据库中完成查询后,才会执行函数(err,result)。因此,您无法确定函数(err,result)何时会被调用。因此,在大多数情况下,标志总是未定义的,因为数据库没有执行查询,这会导致未定义的变量标志。为了避免这个问题,请在函数中执行额外的逻辑(错误,结果)。

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

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