Socket.io-client: 中间件错误未捕获

创建于 2014-06-05  ·  8评论  ·  资料来源: socketio/socket.io-client

我可能犯了一个错误,但我无法在客户端捕获中间件错误,这是服务器代码:

(function () {
    'use strict';

    var url = require("url"),
        sio = require('socket.io')(3010);

    //Authentification required
    sio.use(function (socket, next) {
        return next(new Error('refused client'));
    });
}());

和客户端代码:

(function () {
    "use strict";

    //Network
    var socket = io.connect(SOCKET_IO_SERVER);

    socket.on('error', function(){
        console.error(arguments);
    });
}());

那么它是一个错误吗?

编辑:在 chrome 上使用网络选项卡我确实看到了一个包含“拒绝客户端”的polling请求

最有用的评论

使用命名空间时我有同样的问题。 @oliveiragabriel07解决方案也对我有用,但我认为客户端应该能够接收到一般连接中间件(io.use)中抛出的错误我猜这是 socket.io 服务器问题

所有8条评论

没有人?

我们无法运行您的示例。 更好的做法是提供一个失败的测试或一个 repo,其中包含一个我们可以运行以查看失败的示例。 这里有太多其他因素可能会影响这一点。

您采取了哪些步骤来调试您的问题?

+1
当错误作为参数传递给中间件上的下一个时,客户端不会调用错误回调。

编辑

我发现在使用命名空间时,中间件应该附加到命名空间:

var nsp = io.of('/namespace');

// client never receives the error event
io.use(function (socket, next) {
    return next(new Error('refused client')); 
});

// this way works
nsp.use(function (socket, next) {
    return next(new Error('refused client')); 
});

@oliveiragabriel07谢谢,这似乎是确切的问题,它的客户端实际上被拒绝了,但没有收到错误。

我创建了一个带有工作异常的小型仓库https://github.com/Korri/socket.io-issue688

我能够在带有“错误”事件处理程序的 socket.io 1.0 中捕获客户端中的中间件错误。

使用命名空间时我有同样的问题。 @oliveiragabriel07解决方案也对我有用,但我认为客户端应该能够接收到一般连接中间件(io.use)中抛出的错误我猜这是 socket.io 服务器问题

我同意@jbaez。

要捕获错误,您需要在 next() 之后返回。 我认为这也是 express.js 中的错误。
你应该有这样的:

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

这是不好的

io.use(function (socket, next) {
       return next(new Error('refused client'));
});
此页面是否有帮助?
0 / 5 - 0 等级