首页 > 解决方案 > 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 被调用,就停止它再次执行,直到数据库更新。这可能是一个基本问题,但我是新手,任何帮助都会非常有帮助

标签: javascriptnode.jsmongodbexpress

解决方案


您可以将异步队列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});   
});

推荐阅读