Как обращаться с промежуточным ПО io.use для фиксации ошибок на клиенте?

Мне нужно проверить аутентификацию для моего подключения к сокету и удалить его, если они не удались. Мой код сервера и клиента выглядит следующим образом:

// сервер.js

var http = require('http');
var sio = require('socket.io');
var app = require('express')();

var server = require('http').createServer(app).listen(3000, function () {
    console.log('Server listening on 3000 port');
});

var io = sio.listen(server);

io.use(function (socket, next) { 
    return next(new Error('Not Authenticated'));
});

// клиент.js

var socket = io.connect(window.location.origin);

socket.on('connect', function () {
    console.log('socket connected')
});

Моя проблема в том, что я не могу зафиксировать ошибку Not Authenticated на стороне клиента, чтобы обработать ее и, например, показать всплывающее окно.

Теперь, если ошибка Not Authenticated выполняется на стороне сервера, соединение с сокетом все еще сохраняется, но ни один из socket.emit('message') не работает.

Как я могу зафиксировать эту ошибку на стороне клиента, чтобы принять какое-то решение?


person Artem Baranovskii    schedule 20.11.2015    source источник


Ответы (1)


Вы должны поймать error событий на стороне клиента:

socket.on('error', function(err) {
  console.log('The server sent an error', err);
});

Обновление 2021: для Socket.io v3 и выше ошибки, которые передаются обратным вызовам промежуточного ПО, вызывают событие connect_error на стороне клиента, как описано в документации здесь.

person robertklep    schedule 22.11.2015
comment
Вы должны изменить событие ошибки с помощью connect_error. Ресурс: socket.io/docs/v4/server-api - person Oğuzhan; 21.03.2021
comment
@Oğuzhan спасибо, я обновил ответ, чтобы отразить те изменения: D - person robertklep; 21.03.2021