我正在使用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});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句