简体   繁体   中英

Express: abstracting away middleware for app.use

I want to go from this code in my 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')]
}));

to this:

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

but I just don't know how to make the function that is passed in to app.use be a proxy for the other two middleware functions.

Something like this fills wrong, or is it fine?

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

You can group the middlewares like this:

//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)
    })
}

then use it in app just like you mentioned:

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

this also works because app.use can handle arrays

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM