Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果两个设备在nodejs中同时命中api,如何将这两个JSON对象存储到mongodb_Javascript_Json_Node.js - Fatal编程技术网

Javascript 如果两个设备在nodejs中同时命中api,如何将这两个JSON对象存储到mongodb

Javascript 如果两个设备在nodejs中同时命中api,如何将这两个JSON对象存储到mongodb,javascript,json,node.js,Javascript,Json,Node.js,在我的项目中,我有两个硬件设备。每两分钟用JSON对象访问一次我的API。如果它到达不同的时间,我的控制器将存储JSON对象和mongodb 但如果两个设备同时命中API,它会将第一个对象存储到数据库中,而第二个对象则会出错 如果两个设备同时点击“pushSensorData”,我将得到mongo错误 pushSensorData:功能(请求、恢复){ ReceivedMessage=req.query; console.log('received message',received mess

在我的项目中,我有两个硬件设备。每两分钟用JSON对象访问一次我的API。如果它到达不同的时间,我的控制器将存储JSON对象和mongodb

但如果两个设备同时命中API,它会将第一个对象存储到数据库中,而第二个对象则会出错

如果两个设备同时点击“pushSensorData”,我将得到mongo错误

pushSensorData:功能(请求、恢复){
ReceivedMessage=req.query;
console.log('received message',received message);
MongoClient.connect(mongoUrl,函数(err,db){
db.collection('sensor').find({“sMacId”:receivedMessage.MAC}).toArray(函数(错误,响应){
ievedMessage.timestamp=新日期(receivedMessage.timestamp);
ReceivedMessage[“sensorMacId”]=ReceivedMessage.MAC.toString();
如果(ReceivedMessage.sensorMacId!=null){
ReceivedMessage[“占用”]=parseInt(receivedMessage.OC);
ReceivedMessage[“ambientLight”]=parseInt(receivedMessage.ALS);
receivedMessage[“power”]=parseInt(receivedMessage.POW);
ReceivedMessage[“timestamp”]=ReceivedMessage.timestamp;
if(isNaN(接收到的信息占用))
ReceivedMessage[“占用”]=0;
if(isNaN(ReceivedMessage.ambientLight))
ReceivedMessage[“环境光”]=0;
if(isNaN(receivedMessage.power))
ReceivedMessage[“电源”]=0;
删除receivedmessage.MAC;
删除receivedmessage.OC;
删除ReceivedMessage.ALS;
删除receivedMessage.POW;
insertDocument(数据库,函数(){
db.close();
});
}否则{
db.close();
}
})
});
var insertDocument=函数(db,回调){
db.collection('sensordata').insertMany([ReceivedMessage],函数(err,response){
控制台日志(“插入”,响应);
});
};
},

};如果我们仔细查看您的代码,我们可以看到您正在使用
db.close()在操作后关闭数据库连接

因此,这会在第二次请求执行中引发错误,要么您忽略关闭数据库(实际上这不是什么大问题),现有进程将以任何方式为您处理此问题,要么使用会话来分离请求。

很难确定,但也许您需要使用会话?我很确定这是因为您在第一个请求中关闭了mongo连接,而第二个请求试图访问db。尝试只在服务器启动时连接一次并保持打开状态。这会显示什么错误?@Paul,你能告诉我如何使用会话吗?你能建议我如何使用会话吗?你能告诉我如何使用会话吗。