javascript - 如何在nodejs中首先实现mysql查询?(或者先实现条件查询)
问题描述
这是第一次使用node js所以这个问题可以是非常基本的问题。我尝试使用回调而不是仅返回值,但我无法解决问题。
听说mysql查询是在node js中的其他代码之后执行的。 但我想将(如果条件)查询放在代码中间,并在执行查询下面的代码之前检查条件。
我正在做物联网的事情(传感器 + android 应用程序 + aws ubuntu 服务器和 nodejs 并使用 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
///但是如果我们从控制台看到结果/////
错误检查结果未定义
(这是来自 insert_temp 函数!)昵称是?left_num 是 ? right_num 是?九铁 0 1
错误检查/// left_sum 为 0 right_sum 为 45 传感器损坏
(这是来自 error_check 函数!此函数在 insert_temp 函数之前调用。error_check 函数执行较晚......所以我无法检查传感器是否错误)
解决方案
connection.query
是一个异步函数,因此将在事件循环结束时执行。asynchronous
您可以使用方式的即时synchronous
方式 using util.promisify()
。
您可以像下面这样使用您的代码,
app.get('/log', function(req, res){
r = req.query;
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());',r.nickname);
var query = connection.query(sql,function(err,result){
if (err) throw err;
if ((result[0].left_sum - result[0].right_sum >=30 )|| (result[0].right_sum - result[0].left_sum >=30 )){
console.log("Sensor is broken");
res.end("NOT OK: Sensor is broken");
}
else{
insert_temp(r.nickname,r.left_num,r.right_num);
res.end('OK:' + JSON.stringify(req.query));
}
});
});
- 如果此代码出现错误,请告诉我。
推荐阅读
- asp.net - 在 Hotchocolate GraphQL 中组织查询、变异和订阅类的最佳实践和有效方法是什么
- r - 如果 R 中有许多 NA,则合并行数据
- python - 按 n>1 周重新采样工作不如预期
- html - 无法为汉堡菜单添加后两行
- python - 如何将熊猫数据框分组到跟踪列表?
- python - 如何使用opencv python 3计算图形图像中的行数
- android - 如何在Android中实现焦点图标的发光效果?
- python - 将元组的字符串表示形式转换为元组
- reactjs - 如何使用 React Native 解析复杂数据?
- reactjs - 在基于函数的组件中将所有状态传递给子组件