【发布时间】:2021-11-04 06:57:21
【问题描述】:
我想从用户那里接收值,将其更新到 MongoDb,然后将其转发给具有特定 targetId 的接收器。现在,当两个用户都在线时,它工作正常,但是当接收器离线时,应用程序崩溃并且错误是无法读取未定义的属性发射。请帮我解决这个问题。
socket.on('data',Accmsg => {
const findRsvpAndUpdate = (result,callback)=>{
var value = summa.findOneAndUpdate(
{$or:[{sourceId:Accmsg.sourceId,targetId:Accmsg.targetId},{sourceId: Accmsg.targetId,targetId: Accmsg.sourceId}]},
{receive:Accmsg.receive,give:Accmsg.give,sourceId:Accmsg.sourceId,targetId:Accmsg.targetId},{upsert: true,new:true},
function (error,results){
if (error) {
callback(error);
} else {
callback(null, results);
}
})
}
findRsvpAndUpdate(Accmsg, (error, result) => {
if (error) {
console.log(error);
} else {
console.log("The result is " +result);
try {
let targetId = Accmsg.targetId;
clients[targetId].emit('clientAccount', Accmsg);// problem causing code line
}catch (e){
console.log(e);
}
}
});
});
【问题讨论】:
-
在调用
.emit()之前检查clients[targetId]是否未定义。 -
因为接收器没有连接所以
clients[targetId]不是socket。
标签: javascript node.js mongodb mongoose socket.io