Express:组成中间件

我想将一系列的app.use()调用移动到它自己的模块中。 封装这个最简单的方法是在导出中公开一个function(app) ,但是我觉得移交app对象是一个不透明的接口。

我想从模块外部公开一个中间件app.use() 。 我需要链接/撰写内部使用的中间件。

有没有这样一个时尚的方式,或者一个替代? 最简单的方法是什么? 任何我应该避免的?

浏览Express(和Connect所基于的)的代码,看起来调用在一个中间件上的使用不会以任何方式通知任何事情,所以如果没有传入app ,就没有办法事先编写任何东西。

但是,您可以在运行时进行组合,例如第一次调用中间件,组合一些函数并caching/调用它们。

这是我的意见:

 // app.js ... app.use(require('./middleware')()); ... // middleware.js var express = require('express'); module.exports = function() { var middleware = [ // list of middleware that you want to have performed: function mymiddleware(req, res, next) { console.log('hello world'); next(); }, express.logger('dev'), express.cookieParser(), express.static(__dirname) ]; return function(req, res, next) { (function iter(i, max) { if (i === max) { return next(); } middleware[i](req, res, iter.bind(this, i + 1, max)); })(0, middleware.length); }; }; 

如果您需要访问自定义中间件中的应用程序,则可以通过req.appres.app访问它。