Как вставить промежуточное ПО express после инициализации приложения? - PullRequest
0 голосов
/ 31 марта 2020

app = express (); Я установил соединение с сокетом после app.use (), и я хочу вставить другое промежуточное ПО после подключения сокета:

const app = express();
app.use('/', () => {});
const wss = new ws.Server({ port: 8086 });

wss.on('connection', (ws) => {
   app.use((req, res, next) => {
      ws.send(JSON.stringify({ req, res }));
      next();
   });
});

app.listen(8080);

, но оно не работает, может Express вставить промежуточное ПО после инициализации приложения

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

наконец-то я исправил эту проблему:

wss.on('connection', function (ws) {
    app._mockUsedWsSend = ws.send.bind(ws);
});

// in router
const wsSend = req.app._mockUsedWsSend;
if (wsSend) {
   wsSend(JSON.stringify({
       path: req.path
   }));
}

0 голосов
/ 31 марта 2020

Одним из решений является создание промежуточного программного обеспечения, которое проверяет, добавлено ли новое промежуточное программное обеспечение. проверьте следующий пример.

//this is an array of functions which will work as a middlware.
let listOfMiddlewareFunctions = [];

app.use((req, res, next) => {
    //this middleware will loop through all elements in listofMiddlewareFunctions
    //and pass the parameters req, res, next to each middlewares.
    listOfMiddlewareFunction.foreach(middleware => middleware(req, res, next));
});

wss.on('connection', (ws) => {
    //on socket connection, the following will add the middleware to the array made before.
    const newMiddleware = (req, res, next) => {
      ws.send(JSON.stringify({ req, res }));
      next();
    };

    listOfMiddlewareFunction .add(newMiddleware);
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...