2016-06-29 40 views
1

Socket.IO允许中间件功能传递错误。自定义Socket.IO中间件错误事件?

var io = require('socket.io')(); 
io.use(function(socket, next){ 
    if (socket.request.headers.cookie) return next(); 
    next(new Error('Authentication error')); 
}); 

客户端可以通过侦听默认的“错误”事件侦听这些错误。

clientIO.on('error', function(err) { 
    console.log(err); 
} 

有没有什么办法让Socket.IO中间件发出自定义事件名称,而不是“错误”(例如,“AUTHENTICATION_ERROR”)?

回答

2

从我在代码库中看到的看起来并不像它。错误消息通过触发客户端中的error事件的特殊数据包类型发送,因此它不是这方面的常规消息(您可以用另一种类型替换)。

你必须沿着传递数据有错误的选择,虽然:

// server 
io.use(function(socket, next){ 
    if (socket.request.headers.cookie) return next(); 
    let err = new Error('Authentication error'); 
    err.data = { type : 'authentication_error' }; 
    next(err); 
}); 

// client 
clientIO.on('error', function(err) { 
    if (err.type === 'authentication_error') { 
    ... 
    } else { 
    ... 
    } 
} 
+1

看来好像服务器发出错误信息(“验证错误”),而不是整个错误的对象,所以有是无法访问错误的其他属性。不知道这是不是一个无关的问题,但。 – user2901933

+1

对于当前版本的'socket.io'(1.4.8),似乎工作得很好。 [这是一个要点](https://gist.github.com/robertklep/a8adbdf15a210ac432e4cc1a75d912bf)与我测试过的代码。我相信你需要使用'err.data',而不是像'err.type'这样的随机属性。 – robertklep