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

时间:2018-10-11 10:08:07

标签: express socket.io

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

我的socket.io位于express之上:

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

const io = require('socket.io')(app{path: '/socket'});

如果我通过除/socket之外的任何路径访问此服务器,则将执行中间件。
但是,对/socket进行(GET)请求不会触发中间件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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