我有一个简单的快递应用程序。但是我想在例如上重新加载中间件一些事件。 这是可以正常工作的代码(中间件现在使用新的配置),但是我想知道这是否是正确的方法:
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' }));
答案 0 :(得分:1)
没有支持的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' });
请记住,这是服务器上的全局更改,用于将来所有用户的所有请求。因此,为所有用户更改实时服务器的配置是非常不寻常的事情。
如果您真的只想进行更改以影响一个用户的将来请求,则需要完全不同的实现。您仍然可以使用上面提到的代理设计,但是可以使用分支逻辑来决定(可能基于用户会话变量中的某些状态)针对每个给定请求执行哪个中间件。