Как правильно перезагрузить Express Middleware? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть простое приложение экспресс. Но я хочу перезагрузить промежуточное ПО, например, какое-то событие. Вот код, который работает нормально (связующее ПО теперь использует новый конфиг), но я хочу знать, является ли это правильным способом сделать это:

var express = require('express');
var myMiddleware = require('./myMiddleware.js');
var app = express();

app.use(myMiddleware({ option1: '1', option2: '2' }));

app.listen(3000);

.
.
.
// then on some event I call it again with other options

app.use(myMiddleware({ option1: '100', option2: '200' }));

1 Ответ

1 голос
/ 28 июня 2019

Не поддерживается Express API для удаления предыдущей установленной функции промежуточного программного обеспечения, поэтому вы можете переустановить ее.

Для этого вам придется взломать Express, чтобы удалить это промежуточное программное обеспечение из его внутреннего массива маршрутизации..

Альтернативной реализацией будет прокси промежуточного программного обеспечения, чтобы вы могли затем контролировать то, что на самом деле называется.

// initial value of middleware
let currentMiddleware = myMiddleware{ option1: '1', option2: '2' });
// my middleware proxy

app.use(function(req, res, next) {
    // call currently indicated middleware function
    currentMiddleware(req, res, next);
});

Затем, на каком-то будущем событии:

// change middleware that is called via currentMiddleware
// this new middleware  will be used on all future requests
currentMiddlware = myMiddleware({ option1: '100', option2: '200' });

Имейте в виду, что это глобальное изменение на сервере для ВСЕХ будущих запросов от всех пользователей.Таким образом, довольно необычно менять конфигурацию живого сервера для всех пользователей.

Если вы действительно хотите, чтобы изменение затронуло будущие запросы от одного пользователя, то для этого потребуется совершенно другая реализация.Вы все еще можете использовать вышеупомянутый дизайн прокси, но вы будете использовать логику ветвления, чтобы решить (возможно, на основе некоторого состояния в пользовательской переменной сеанса), какое промежуточное программное обеспечение выполнять для каждого данного запроса.

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