如何处理 io.use 中间件来捕获客户端的错误?
How to handle io.use middleware to capture errors on client?
我需要检查我的套接字连接的身份验证,如果失败则丢弃一个。我的服务器和客户端代码如下所示;
// 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')
的 none 不起作用。
如何在客户端捕获此错误以做出决定?
您应该在客户端捕获 error
事件:
socket.on('error', function(err) {
console.log('The server sent an error', err);
});
2021 更新:对于 Socket.io v3 及更高版本,传递给中间件回调的错误会触发 connect_error
事件客户端,如文档所述here.
我需要检查我的套接字连接的身份验证,如果失败则丢弃一个。我的服务器和客户端代码如下所示;
// 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')
的 none 不起作用。
如何在客户端捕获此错误以做出决定?
您应该在客户端捕获 error
事件:
socket.on('error', function(err) {
console.log('The server sent an error', err);
});
2021 更新:对于 Socket.io v3 及更高版本,传递给中间件回调的错误会触发 connect_error
事件客户端,如文档所述here.