Javascript 重新加载express中间件的正确方法是什么?

Javascript 重新加载express中间件的正确方法是什么?,javascript,node.js,express,Javascript,Node.js,Express,我有一个简单的express应用程序。但我想在某些事件上重新加载中间件。 下面是工作正常的代码,中间件现在使用新配置,但我想知道这是否是正确的方法: var express = require('express'); var myMiddleware = require('./myMiddleware.js'); var app = express(); app.use(myMiddleware({ option1: '1', option2: '2' })); app.listen(300

我有一个简单的express应用程序。但我想在某些事件上重新加载中间件。 下面是工作正常的代码,中间件现在使用新配置,但我想知道这是否是正确的方法:

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' }));

不支持使用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' });
请记住,对于将来所有用户的所有请求,这是服务器上的全局更改。因此,为所有用户更改实时服务器的配置是一件非常不寻常的事情

如果您真的只想更改以影响来自一个用户的未来请求,那么这将需要一个完全不同的实现。您仍然可以使用上面提到的代理设计,但是您可以使用分支逻辑根据用户会话变量中的某些状态来决定为每个给定请求执行哪个中间件