Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将中间件绑定到socket.io中的事件_Node.js_Socket.io - Fatal编程技术网

Node.js 如何将中间件绑定到socket.io中的事件

Node.js 如何将中间件绑定到socket.io中的事件,node.js,socket.io,Node.js,Socket.io,我正在nodejs后端服务器中使用socket.io。我想为每个事件设置一个中间件。下面是我的代码: io.use((socket, next) => { // some logic return next(); }); 此代码仅适用于初始连接。它不适用于套接字中的每个事件。如何为每个套接字事件设置中间件 我已经检查了这篇帖子https://stackoverflow.com/questions/35077449/how-to-bind-middleware-to-e

我正在nodejs后端服务器中使用
socket.io
。我想为每个事件设置一个中间件。下面是我的代码:

io.use((socket, next) => {
     // some logic
     return next();
});
此代码仅适用于初始连接。它不适用于套接字中的每个事件。如何为每个套接字事件设置中间件


我已经检查了这篇帖子
https://stackoverflow.com/questions/35077449/how-to-bind-middleware-to-events-in-socket-io
https://stackoverflow.com/questions/18664184/how-to-pass-changes-from-middleware-to-socket-io
,但它们不能满足我的需要。我想在不更改每个事件侦听器的情况下设置中间件。

听起来像是在寻找“通配符事件”。我个人建议你试试

该页面的片段:




我不认为socket.io在不修补库或重写EventEmitter中的内容的情况下支持每个事件的中间件。它可以在不修改库的情况下完成,甚至可以通过添加定义为普通事件处理程序的函数(可选地将处理程序的数组、堆栈作为参数)来完成每个事件,它连续调用要编写的中间代码和要作为普通事件处理程序运行的主代码。如果我自己做的话,我可以分享。从Socket.io v2.0.4开始,这已经过时了,请检查这个问题
npm install --save socketio-wildcard
var io         = require('socket.io')();
var middleware = require('socketio-wildcard')();

io.use(middleware);

io.on('connection', function(socket) {
  socket.on('*', function(packet){
    // client.emit('foo', 'bar', 'baz')
    packet.data === ['foo', 'bar', 'baz']
  });
});

io.listen(8000);