如何处理io.use中间件来捕获客户端上的错误



我需要检查套接字连接的身份验证,如果失败,则丢弃一个。我的服务器和客户端代码如下所示;

//server.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'));
});

//client.js

var socket = io.connect(window.location.origin);
socket.on('connect', function () {
    console.log('socket connected')
});

我的问题是,我无法在客户端捕获Not Authenticated错误来处理它,并显示一些弹出窗口。

现在,如果Not Authenticated错误在服务器端执行,那么套接字连接仍然存在,但socket.emit('message')都不起作用。

如何在客户端捕获此错误以做出一些决定?

您应该在客户端捕获error事件:

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

2021更新:对于Socket.io v3及更高版本,传递给中间件回调的错误会触发connect_error事件客户端,如本文所述。

相关内容

最新更新