node.js - 自定义 Socket.IO 中间件错误事件?

标签 node.js 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”)?

最佳答案

从我在代码库中看到的情况来看,它看起来不像。错误消息通过触发客户端中的 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 {
    ...
  }
}

关于node.js - 自定义 Socket.IO 中间件错误事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38108485/

相关文章:

mysql - 如何使用 socket.io 删除所有用户的消息?

node.js - NodeJS、Express 和多事的 Socket.io

javascript - 广播到房间的套接字 IO 无法正常工作

node.js - 发出 socket.io 和 sailsjs (Twitter API)

node.js - 如何在mongodb中获取特定月份的日记录?

javascript - 每个 Node 调用是否运行自己的 Node 版本

javascript - node.js/socket.io如何分离html的javascript?

node.js sockets.io 每 ~25 秒断开一次连接(与心跳相关)

javascript - 有没有办法使用node.js知道mysql表中是否存在行?

node.js - 如何在不同 Node 之间持久保存对话数据?