私のプロジェクトでは2つのハードウェアデバイスがあります。 2分ごとにJSONオブジェクトでAPIに当たっています。別の時間にヒットした場合、私のコントローラーはJSONオブジェクトmongodbの両方を格納します。nodejsで2つのデバイスが同時にapiをヒットした場合、JSONオブジェクトをmongodbに保存する方法
しかし、両方のデバイスが同時にAPIをヒットした場合、2番目のエラーが発生するために、1番目のオブジェクトがデータベースに保存されます。
同時に2つのデバイスが「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のプロパティを読み取ることができません 'のtoString' |アプリ| at /home/sp_mean/smartpower/api/controllers/SensorMessageController.js:63:71 0 | app | at 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 |ハンドルコールバック(/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 |アプリケーション| /home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:591:16 0 | app | at queryCallback(/home/sp_mean/smartpower/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:232:18) 0 |アプリケーション| /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]、シグナル[SIGINT]経由でコード[1]で終了したApp [app] PM2 | -forkモードでの実行開始 - アプリケーション名:app id:0
確かに分かりにくいですが、セッションを使用する必要がありますか? –
2番目のリクエストがdbにヒットしようとしている間に、最初のリクエストでmongo接続を閉じることができます。サーバーの起動時に一度だけ接続し、開いたままにしてください。 –
これは*何*エラー? – str