访问socketio端点时未调用Express中间件

访问socketio端点时未调用Express中间件,express,socket.io,Express,Socket.io,我有一个应用程序,我想避免机器人尝试使用我的socket.io端点 My socket.io位于express的顶部: const app = require('express')(); app.use(blockRobots); const io = require('socket.io')(app{path: '/socket'}); 如果我将此服务器访问到除/socket以外的任何路径,将执行中间件。 但是,对/socket执行(GET)请求不会触发中间件 有什么想法吗?在不深入研究代

我有一个应用程序,我想避免机器人尝试使用我的socket.io端点

My socket.io位于express的顶部:

const app = require('express')();
app.use(blockRobots);

const io = require('socket.io')(app{path: '/socket'});
如果我将此服务器访问到除
/socket
以外的任何路径,将执行中间件。
但是,对
/socket
执行(GET)请求不会触发中间件


有什么想法吗?

在不深入研究代码的情况下,我假设
socket.io
将侦听器附加到HTTP服务器,该服务器在Express处理请求之前被触发

您可以使用
socket.io
allowRequest
选项拒绝不需要的请求:

const io = require('socket.io')(app, {
  path: '/socket',
  allowRequest: (req, callback) => {
    if (CHECK_FOR_ROBOT) {
      return callback(null, false);
    } else {
      return callback(null, true);
    }
  }
});

你的回答引导我走上正确的道路。engine.io/Server执行的第一项检查是检查
传输
查询参数。如果该参数不存在,它将取消请求流。这就是为什么在我的例子中没有调用中间件方法的原因。