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

Posted

技术标签:

【中文标题】如何处理 io.use 中间件来捕获客户端上的错误?【英文标题】:How to handle io.use middleware to capture errors on client? 【发布时间】:2016-02-23 02:47:54 【问题描述】:

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

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

// 客户端.js

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

您应该使用 connect_error 更改错误事件。资源:socket.io/docs/v4/server-api @Oğuzhan 谢谢,我更新了答案以反映那些改变:D

以上是关于如何处理 io.use 中间件来捕获客户端上的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理尝试捕获异常android

如何处理阿波罗客户端上的突变错误?

如何处理 Relay Modern 上的突变错误?

如何处理 IHostBuilder CreateHostBuilder 的异常

swift - 如何处理未捕获的异常

如何处理自适应卡片机器人框架 v4 上的点击操作?