簡體   English   中英

node.js 中的順序 HTTP post 請求

[英]Sequential HTTP post requests in node.js

我正在使用 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

如您所見,第三次傳輸附加在第二次傳輸之前

POST 請求處理我的 server.js 的部分看起來像這樣

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});   
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM