我目前正在开发一个聊天模块,作为使用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;
}
sendMessage(conversation, data.message);
} catch (err) {
socket.emit('error:chat:new-message-in-room', { error: 'Internal server error' });
}
});
});