【问题标题】:socket.io emit not working when the receiver is offline当接收器离线时,socket.io 发出不工作
【发布时间】: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


【解决方案1】:

我解决了这个问题。我使用try catch 处理此错误,现在它工作正常。

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
猜你喜欢
  • 1970-01-01
  • 2017-05-11
  • 2017-09-10
  • 1970-01-01
  • 2013-08-17
  • 2014-12-26
  • 2014-01-19
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多