Express:为 app.use 抽象中间件

Express: abstracting away middleware for app.use

我想从我的 index.js

中的这段代码开始
app.use(require('sass-middleware').middleware({
  src: path.resolve(__dirname, '../'),
  dest: path.resolve(__dirname, '../public')
}));
app.use(require('browserify-dev-middleware')({
  src: path.resolve(__dirname, '../'),
  transforms: [require('jadeify')]
}));

对此:

app.use(require('asset-pipeline-dev-middelware'));

但我只是不知道如何使传递给 app.use 的函数成为其他两个中间件函数的代理。

这样的东西填错了,还是没问题?

require('asset-pipeline-dev-middelware')(app);

您可以像这样对中间件进行分组:

//asset-pipeline-dev-middelware.js
var middleware1 = require('first-middleware')
var middleware2 = require('second-middleware')

function(req, res, next){
    middleware1(req, res, function(err){
        if(err) return next(err);
        middleware2(req, res, next)
    })
}

然后像您提到的那样在应用程序中使用它:

app.use(require('asset-pipeline-dev-middelware'));

这也有效,因为 app.use 可以处理数组

// asset-pipeline-dev-middelware.js
var middleware1 = require('first-middleware')
var middleware2 = require('second-middleware')

module.export = [middleware1, middleware2];

// index.js
app.use(require('asset-pipeline-dev-middelware'));