簡體   English   中英

如果兩個設備同時在Node.js中命中api,如何將兩個JSON對象都存儲到mongodb

[英]How to store both the JSON object to mongodb, if two device hit the api at same time in nodejs

在我的項目中,我有兩個硬件設備。 每隔兩分鍾就會用JSON對象訪問我的API。 如果到達其他時間,我的控制器將同時存儲兩個JSON對象mongodb。

但是,如果兩個設備同時按下API,則它將第一個對象存儲到數據庫中,而第二個對象則給出了錯誤。

如果兩個設備同時按下“ pushSensorData”,則會出現mongo錯誤。

 pushSensorData: function(req, res) { receievedMessage = req.query; console.log('received message ', receievedMessage); MongoClient.connect(mongoUrl, function(err, db) { db.collection('sensor').find({ "sMacId": receievedMessage.MAC }).toArray(function(error, response) { ievedMessage.timestamp = new Date(receievedMessage.timestamp); receievedMessage["sensorMacId"] = receievedMessage.MAC.toString(); if (receievedMessage.sensorMacId != null) { receievedMessage["occupancy"] = parseInt(receievedMessage.OC); receievedMessage["ambientLight"] = parseInt(receievedMessage.ALS); receievedMessage["power"] = parseInt(receievedMessage.POW); receievedMessage["timestamp"] = receievedMessage.timestamp; if (isNaN(receievedMessage.occupancy)) receievedMessage["occupancy"] = 0; if (isNaN(receievedMessage.ambientLight)) receievedMessage["ambientLight"] = 0; if (isNaN(receievedMessage.power)) receievedMessage["power"] = 0; delete receievedMessage.MAC; delete receievedMessage.OC; delete receievedMessage.ALS; delete receievedMessage.POW; insertDocument(db, function() { db.close(); }); } else { db.close(); } }) }); var insertDocument = function(db, callback) { db.collection('sensordata').insertMany([receievedMessage], function(err, response) { console.log("Inserted", response); }); }; }, }; 

這是獲取TypeError的錯誤:無法讀取未定義0 | app的屬性'toString'| 在/home/sp_mean/smartpower/api/controllers/SensorMessageController.js:63:71 0 | app | 在handleCallback(/home/sp_mean/smartpower/node_modules/mongodb/lib/utils.js:95:56)0 | app | 在/home/sp_mean/smartpower/node_modules/mongodb/lib/cursor.js:852:16 0 | app | 在handleCallback(/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:171:5)0 | app | 在setCursorNotified(/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:516:3)0 | app | 在/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:591:16 0 | app | 在queryCallback(/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:232:18)0 | app | 在/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/connection/pool.js:455:18 0 | app | 在_combinedTickCallback(內部/進程/next_tick.js:67:7)處0 | app | 在process._tickDomainCallback(內部/進程/next_tick.js:122:9)中PM2 | ID [0]和pid [38409]的應用[app]通過信號[SIGINT] PM2 |代碼1退出。 以-fork模式-為應用程序名稱開始執行序列:應用程序ID:0

如果我們仔細查看您的代碼,可以看到您在使用db.close();操作之后正在關閉數據庫連接db.close(); 因此,這會在第二次請求執行中引發錯誤,或者您忽略了關閉數據庫(實際上這沒什么大不了的),現有的進程將為您處理此問題,或者使用會話來分離請求。

暫無
暫無

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

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