有没有办法在 Express 堆栈中注入中间件?我的意思是我想让我的 app.js 设置主中间件链,然后调用传递应用程序实例的其他模块,他们可能想要插入更多中间件(例如,想要在正确位置添加护照的身份验证模块)
问问题
8898 次
3 回答
14
您当然可以将您的app
对象传递给其他模块并use
在那里调用。当然,中间件函数是按照它们添加的顺序执行的,所以你必须非常小心,确保你use
以正确的顺序调用。
应用程序.js
var app = express();
// ...
app.use(express.logger()); // first middleware function
var someOtherModule = require('./mod.js');
someOtherModule.init(app);
app.use(express.static()); // last middleware function)
mod.js
exports.init = function(app) {
app.use(function(req, res, next) {
});
};
至于实际在堆栈中间注入中间件函数(在您已经app.use
使用一组中间件函数调用之后),没有记录的方法可以做到这一点。 use
只将一个函数添加到堆栈的末尾。
use
实际上是由proto.js中的 Connect 提供的:
app.use = function(route, fn){
...
this.stack.push({ route: route, handle: fn });
return this;
};
从技术上讲,你可以摆弄app.stack
自己,但我不会这样做。你会弄乱一个未记录的实现细节,这很可能会改变。换句话说,未来对Connect 或 Express 的更新可能会破坏您的应用程序。
于 2012-12-03T20:56:39.110 回答
0
您可以使用 app.use(fn) 或像这样堆叠它们:
app.get('/foo', fn1, fn2, fn3);
签名必须始终相同并调用 next();
function(req, res, next) {
next();
}
于 2012-12-03T21:22:18.780 回答
-2
我不明白这是什么问题?
您可以在中间件中添加任何功能:
app.use(function(req,res,next){
//some munipulation with req and res
next()
})
你可以把它发送app
到你的模块中
于 2012-12-03T20:36:45.580 回答