【问题标题】:How to handle io.use middleware to capture errors on client?如何处理 io.use 中间件来捕获客户端上的错误?
【发布时间】: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') 都不起作用。

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

【问题讨论】:

    标签: node.js express websocket socket.io socket.io-1.0


    【解决方案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
    猜你喜欢
    • 2016-02-25
    • 2018-09-03
    • 1970-01-01
    • 2010-11-19
    • 2016-01-19
    • 2022-11-13
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多