代码之家  ›  专栏  ›  技术社区  ›  OSAMA MOHMED

使用Socket处理聊天模块中的错误。IO和Node.js

  •  0
  • OSAMA MOHMED  · 技术社区  · 9 月前

    我目前正在开发一个聊天模块,作为使用Socket的系统的一部分。IO和Node.js。我有几个场景需要处理错误并向客户返回适当的响应,但我不确定这样做的最佳实践。

    场景1:从客户端发出消息时,我需要检查数据库中是否存在对话。如果对话不存在,我想向客户端返回错误消息或描述。

    场景2:如果发送方JWT(JSON Web令牌)在尝试发送消息时已过期,我如何向客户端返回错误描述?

    技术栈:

    Node.js与Express 插座。IO Flutter(适用于移动应用程序) React.js(用于web应用程序) 处理这些错误并将其实时传达给客户端的最佳实践是什么?

    提前感谢您的帮助!

    为了处理这些错误,我尝试为每个主要事件发出单独的错误事件。例如,如果我在房间里有一个名为chat:new message的事件,我会在房间里创建一个相应的错误事件error:chat:new messages。然而,这种方法使事件数量增加了一倍。有8个主要事件,我最终有16个事件,这感觉很麻烦,可能不是最好的做法。

    const io = require('socket.io')(server);
    
    io.on('connection', (socket) => {
        socket.on('chat:new-message-in-room', async (data) => {
            try {
                const conversation = await getConversationFromDB(data.conversationId);
                if (!conversation) {
                    socket.emit('error:chat:new-message-in-room', { error: 'Conversation not found' });
                    return;
                }
                
                const isTokenValid = validateJWT(data.token);
                if (!isTokenValid) {
                    socket.emit('error:auth:expired', { error: 'JWT expired' });
                    return;
                }
    
                // Proceed with sending the message
                sendMessage(conversation, data.message);
            } catch (err) {
                socket.emit('error:chat:new-message-in-room', { error: 'Internal server error' });
            }
        });
    });
    
    
    0 回复  |  直到 9 月前