antpaw
antpaw

Reputation: 15985

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

Upvotes: 2

Views: 87

Answers (2)

antpaw
antpaw

Reputation: 15985

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

Upvotes: 2

hassansin
hassansin

Reputation: 17498

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

Upvotes: 2

Related Questions