首页 > 解决方案 > 无法使用 socketid 发出事件

问题描述

我正在尝试为套接字 io 编写集成测试。当错误被捕获时,我正在对服务器事件使用 try-catch 我为客户端发出一个事件来处理错误

io.of('/rooms').on('connection', socket => {
        const socketId = socket.id;
        console.log('server socketid', socketId);
        const userRepository = getCustomRepository(UserRepository);
        const conversationToUserRepository = getCustomRepository(ConversationToUserRepository);

        socket.on('initGroupChat', async (users_id, fn) => {
            try {
                const [user, listConversationToUser] = await Promise.all([
                    userRepository.findOne({
                        where: {
                            users_id,
                        },
                    }),
                    conversationToUserRepository.find({
                        where: {
                            users_id,
                        },
                    }),
                ]);
            if (!user) {
                throw new NotFoundError('User not found with id: ' + users_id);
            }

            console.log(2);

            user.socket_id = socket.id;
            await userRepository.save(user);

            for (const item of listConversationToUser) {
                socket.join(item.conversation_id.toString());
            }
            fn('init group chat success');
        } catch (error) {
            io.to(socketId).emit('error', errorHandlerForSocket(error));
            console.log(10);
        }
    });
});

但在套接字客户端上,什么也没有发生。这是代码套接字客户端:

it.only('Init Group Chat with error', done => {
        socket = io.connect(`http://localhost:${env.app.port}/rooms`, {
            transports: ['websocket']
        });



   const id = 11111;
    socket.emit('initGroupChat', id, (response: any) => {
        console.log('response', response);
    });

    socket.on('error', (error: any) => {
        console.log('error3', error);
        done();
    });

});

在错误事件中,console.log 未在终止时显示。它没有捕捉到我在服务器上发出的事件。

谁能帮我解决这个问题

标签: node.jswebsocketsocket.iointegration-testing

解决方案


每次客户端刷新 socketId 发生变化。

服务器 :

io.emit("send_to_client", {
   userId: 112233,
   data: "Hello user 112233"
});

客户 :

 var userLogin = 112233;
 socket.on("send_to_client", function(res) {
  if(res.userId === userLogin)
    //somethingElse
});

推荐阅读