Categories
JavaScript Answers

How to Exclude a Route from Running an Express Middleware?

Spread the love

Sometimes, we want to exclude a route from running an Express middleware.

In this article, we’ll look at how to exclude a route from running an Express middleware.

Exclude a Route from Running an Express Middleware

To exclude a route from running an Express middleware, we can create our own function that accepts a route path and middleware function and returns a middleware function that checks the route path before running the middleware function.

For instance, we write:

const express = require('express')
const app = express()
const port = 3000

const unless = (path, middleware) => {
  return (req, res, next) => {
    if (path === req.path) {
        return next();
    } else {
        return middleware(req, res, next);
    }
  };
};

const middleware = (req, res, next)=>{
  console.log('middleware')
  next()
}

app.use(unless('/exclude', middleware));

app.get('/', (req, res) => {
  res.send('hello world')
});

app.get('/foo', (req, res) => {
  res.send('foo')
});

app.get('/exclude', (req, res) => {
  res.send('exclude')
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

We create the unless function that takes the path route path string and the middleware middleware function.

In the function, we return a function that checks if the request path which is stored in req.path is the same as path.

If it is, then we call next and stop running the function with return.

Otherwise we use return and call middleware to run the middleware function.

Now if we make a request to any route other than /exclude, we see 'middleware' logged.

Conclusion

To exclude a route from running an Express middleware, we can create our own function that accepts a route path and middleware function and returns a middleware function that checks the route path before running the middleware function.

Leave a Reply

Your email address will not be published. Required fields are marked *