访问socketio端点时未调用Express中间件
我有一个应用程序,我想避免机器人尝试使用我的socket.io端点 My socket.io位于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)请求不会触发中间件 有什么想法吗?在不深入研究代
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执行的第一项检查是检查
传输
查询参数。如果该参数不存在,它将取消请求流。这就是为什么在我的例子中没有调用中间件方法的原因。