【问题标题】:Can not emit event with socketid无法使用 socketid 发出事件
【发布时间】:2020-02-20 07:28:33
【问题描述】:

我正在尝试为套接字 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.js websocket socket.io integration-testing


    【解决方案1】:

    每次客户端刷新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
    });
    

    【讨论】:

    • 这个不行,io.emit('error', errorHandlerForSocket(error));,事件错误没有收到错误
    • 试试:link
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多