javascript - node.js 中的顺序 HTTP 发布请求
问题描述
我正在使用 node.js 和 express 将传感器数据推送到 mongoDB 服务器。我每秒推送大约 5 次数据(使用 HTTP 发布请求)。
我发送汇总的传感器数据。我的传感器数据如下所示
transmission 1 - 1,2,3
transmission 2 - 4,5,6
transmission 3 - 7,8,9
将我的数据附加到数据库后,有时看起来像这样
数据数组 - 1,2,3, 7,8,9 ,4,5,6
如您所见,第三次传输附加在第二次传输之前
我的 server.js 的 POST 请求处理部分看起来像这样
var app = require("express")();
app.post("/saveData", function(req, res){
res.send("a");//sending acknowledgement
Data_From_NodeMCU = req.body.hello; //getting data from JSON object
////Some processing\\\\
dbObject.updateOne(
{name: "AKILA"},
{'$push': {data :{$each: processed_data} }},
function (err) {
if (err)
{
console.log("DB error:");
console.log(err);
}
}
);
});
似乎我想要实现的是,一旦 app.post 被调用,就停止它再次执行,直到数据库更新。这可能是一个基本问题,但我是新手,任何帮助都会非常有帮助
解决方案
您可以将异步队列与1
. 它会是这样的:
const app = require("express")();
const queue = require("async/queue");
const q = queue(function(task, cb) {
dbObject.updateOne({name: "AKILA"},
{'$push': {data :{$each: task.processed_data} }}, (err) => {
if (err) console.log("DB error:", err);
cb();
});
}, 1)
app.post("/saveData", function(req, res){
res.send("a"); //sending acknowledgement
const Data_From_NodeMCU = req.body.hello;
const processed_data = processData(Data_From_NodeMCU);
q.push({processed_data});
});
推荐阅读
- macos - 如何使用 shell 脚本关闭 Mac OS 中的活动文档
- javascript - 为什么日期格式没有给出正确的值?
- scala - scala foreach 有一个增强,不能进行任何操作?
- java - 有效地处理不同类型的文件?
- embedded-linux - 如何使用 yocto recipe 编辑内核文件
- actions-on-google - 看不到我在 Google 助理上的操作的分析。
- c# - 在安装程序之前更改注册表
- c# - Gembox.Document:将 HTML 转换为 Pdf,边框 css 不起作用
- apache-spark - 将具有 StructField 类型的库添加到 pyspark 中的数据框
- uipath - UI 路径中的 Excel 自动化是否支持 libre Office csv 文件