Skipping routes in express
The popular node.js framework, express, has a handy feature that isn't advertised, and can be extremely handy.
Suppose you have a page that you want to expire after a certain amount of time, and then say it's expired.Without this magical feature you might do something like this:
app.get('/will-expire',
showPage,
showExpiredPage
);
var hits = 0, maxhits = 10;
function showPage(req, res, next) {
// this is mixing in logic that doesn't
// belong here and isn't reusable
++hits;
if (hits > maxhits) return next();
res.end('not expired!');
}
function showExpiredPage(req, res, next) {
res.end('page is expired :(');
}
We can make this code cleaner, reusable, and more modular by calling next
with the string route
. This tells express to stop running the callbacks for the matched route, and go try to match another route. Like this:
app.get('/will-expire',
checkExpired,
showPage
);
app.get('/will-expire',
showExpiredPage
);
var hits = 0, maxhits = 10;
function checkExpired(req, res, next) {
// next('route') will go to the next matched route
// this is the magic we use to clean up our code
++hits;
if (hits > maxhits) return next('route');
next();
}
// showPage now is cleaner
function showPage(req, res, next) {
res.end('not expired!');
}
function showExpiredPage(req, res, next) {
res.end('page is expired :(');
}
Written by Adam Blackburn
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Nodejs
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#