Промежуточное программное обеспечение Express не вызывается при доступе к конечной точке socketio - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение, в котором я хочу, чтобы роботы не пытались использовать мою конечную точку socket.io.

Мой socket.io находится поверх экспресса:

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

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

Если ядоступ к этому серверу по любому пути, кроме /socket, промежуточное программное обеспечение выполняется.
Однако выполнение (GET) запроса к /socket не вызывает промежуточное программное обеспечение.

Любые идеи?

1 Ответ

0 голосов
/ 11 октября 2018

Не углубляясь в код, я предполагаю, что 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);
    }
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...