ocram
ocram

Reputation: 1434

Apply middleware to route in Express

I would like to apply a middleware to a route regardless of the type of request. Currently I have:

router.route('/campaigns')
    .get(restrictTo('advertiser'), restrictTo('admin'), queries.getCampaigns)
    .post(restrictTo('advertiser'), restrictTo('admin'), queries.createCampaign);

And I would like something like:

router.route('/campaigns', restrictTo('advertiser'), restrictTo('admin'))
    .get(queries.getCampaigns)
    .post(queries.createCampaign);

But this does not seem to work.

Upvotes: 2

Views: 3619

Answers (3)

Noone
Noone

Reputation: 54

The express documentation says that you can do it like that :

app.use('/user/:id', function (req, res, next) {
  console.log('Request URL:', req.originalUrl)
  next()
}, function (req, res, next) {
  console.log('Request Type:', req.method)
  next()
})

Replace the /user/:id to you desired path.

Source : https://expressjs.com/en/guide/using-middleware.html

Upvotes: 1

Mathieu
Mathieu

Reputation: 111

You can use .all()

Example:

 router.route('/campaigns')
      .all(yourmiddleware)
      .get(function (req, res, next) {
            // your function ...
      }) 

It worked for me.

Upvotes: 3

mscdex
mscdex

Reputation: 106698

You should be able to just use .use() like so:

router.route('/campaigns')
  .use(restrictTo('advertiser'), restrictTo('admin'))
  .get(queries.getCampaigns)
  .post(queries.createCampaign);

or:

router.route('/campaigns')
  .use(restrictTo('advertiser'))
  .use(restrictTo('admin'))
  .get(queries.getCampaigns)
  .post(queries.createCampaign);

Upvotes: 0

Related Questions