Невозможно создать событие с сокетом - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь написать интеграционный тест для сокета 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 не показывался в конце. оно не перехватило событие, которое я посылаю на сервер.

Может кто-нибудь помочь мне решить эту проблему

1 Ответ

1 голос
/ 24 октября 2019

Каждый раз, когда изменяется клиент Refresh 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...