I have a node app sitting like a firewall/dispatcher in front of other micro services and it uses a middleware chain like below:
...
app.use app_lookup
app.use timestamp_validator
app.use request_body
app.use checksum_validator
app.use rateLimiter
app.use whitelist
app.use proxy
...
However for a particular GET route I want to skip all of them except rateLimiter and proxy. Is their a way to set a filter like a Rails before_filter using :except/:only?
Even though there is no build-in middleware filter system in expressjs, you can achieve this in at least two ways.
First method is to mount all middlewares that you want to skip to a regular expression path than includes a negative lookup:
Second method, probably more readable and cleaner one, is to wrap your middleware with a small helper function:
If you need more powerfull route matching than simple
path === req.path
you can use path-to-regexp module that is used internally by Express.Here's an example of using
path-to-regexp
as @lukaszfiszer's answer suggests:I use this regular expression with success :
/^\/(?!path1|pathn).*$/
.You can also skip route like this by putting a condition on req.originalUrl:
Built upon the answer from @lukaszfiszer as I wanted more than one route excluded. You can add as many as you want here.
Can't add as comment sorry.
You can define some routes like below.