如何首先在nodejs中实现mysql查询? (或先执行条件查询)

时间:2019-06-07 09:58:42

标签: javascript mysql node.js

这是第一次使用node js,所以这个问题可能是非常基本的问题。我尝试使用回调方法,而不仅仅是返回值,但是我无法解决问题。

我听说在节点js中的其他代码之后执行mysql查询。 但是我想将查询(如果有条件的话)放在代码的中间,并在执行下面的查询代码之前检查条件。

我正在做IoT事情(传感器+ android应用+带有nodejs的AWS ubuntu服务器,并使用mysql作为数据库) 我想在将数据添加到服务器数据库之前检查传感器是否工作正常。 因此,在将数据存储到数据库之前,我放置了代码以检查传感器是否工作正常。(通过比较两个传感器的结果进行检查。)

但是问题是mysql查询(检查传感器是否正确)的执行时间晚于node.js中的其他代码,因此我无法在中间检查条件。 如何在代码中间运行条件查询并返回任何条件值?



app.get('/log', function(req, res){
        r = req.query;

        result_error = error_check(r.nickname);
        console.log("error check result"+result_error);


        insert_temp(r.nickname,r.left_num,r.right_num);
        //this function is called after error_check function, but when I saw the result, console.log in this function is called earlier than error_check function 

        res.end('OK:' + JSON.stringify(req.query));
});


function error_check(nickname){
        var sql = mysql.format('select sum(left_num) as left_sum, sum(right_num) as right_sum from temp where nickname = ?  and today_date = date(current_date());',nickname);
        var query = connection.query(sql,function(err,result){
                if (err) throw err;
                console.log("Error check/// left_sum is "+result[0].left_sum + " right_sum is "+result[0].right_sum);
                if ((result[0].left_sum - result[0].right_sum >=30 )|| (result[0].right_sum - result[0].left_sum >=30 )){
                        console.log("Sensor is broken");
                        return 1;
                }
                else{
                        return -1;
                }
        });
        console.log(query);
}
/////////////////////////////but the result is
error check result undefined

(this is from insert_temp function! )nickname is ? left_num is ? right_num is ? gucheol 0 1

(this is from error_check function! this function is called before inset_temp function. error_check function is executed late...so I cannot check if sensor is wrong  )
Error check/// left_sum is 0 right_sum is 45
Sensor is broken

///但是如果我们从console /////

看到结果

错误检查结果未定义

(这是来自insert_temp函数!)昵称是? left_num是吗? right_num是? gucheol 0 1

错误检查/// left_sum为0 right_sum为45 传感器坏了

(这是来自error_check函数!此函数在insert_temp函数之前被调用。error_check函数执行得较晚...因此我无法检查传感器是否错误)

1 个答案:

答案 0 :(得分:0)

connection.query是一个异步函数,因此将在事件循环结束时执行。 您可以使用asynchronous的{​​{1}}方式使用synchronous的即时方式。

您可以使用如下所示的代码来工作,

util.promisify()
  • 让我知道此代码是否发生错误。