Is there a way to make this on a single function call?—
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla",todo);
app.get("/blablablabla",todo);
Something like:
app.get("/","/blabla","/blablablabla", todo );
I know this is a syntax mess but just for giving an idea of what I would like to achieve, an array of the routes would be awesome! Anyone know how to do this?
app.get('/:var(bla|blabla)?', todo)
:var sets the req.param that you don't use. it's only used in this case to set the regex.
(bla|blabla) sets the regex to match, so it matches the strings bla and blablah.
? makes the entire regex optional, so it matches / as well.
I know that this is quite late, but just to clarify for future readers.
You can actually pass in an array of paths, just like you mentioned, and it works great:
var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);
I came across this question while looking for the same functionality.
@Jonathan Ong mentioned in a comment above that using arrays for paths is deprecated but it is explicitly described in Express 4, and it works in Express 3.x. Here's an example of something to try:
app.get(
['/test', '/alternative', '/barcus*', '/farcus/:farcus/', '/hoop(|la|lapoo|lul)/poo'],
function ( request, response ) {
}
);
From inside the request object, with a path of /hooplul/poo?bandle=froo&bandle=pee&bof=blarg:
"route": {
"keys": [
{
"optional": false,
"name": "farcus"
}
],
"callbacks": [
null
],
"params": [
null,
null,
"lul"
],
"regexp": {},
"path": [
"/test",
"/alternative",
"/barcus*",
"/farcus/:farcus/",
"/hoop(|la|lapoo|lul)/poo"
],
"method": "get"
},
Note what happens with params: It is aware of the capture groups and params in all of the possible paths, whether or not they are used in the current request.
So stacking multiple paths via an array can be done easily, but the side-effects are possibly unpredictable if you're hoping to pick up anything useful from the path that was used by way of params or capture groups. It's probably more useful for redundancy/aliasing, in which case it'll work very well.
It's not very clean, but if you wanted to try without regex, you could do this:
var routes = [
'/blablablabla',
'/blabla',
'/'
];
for(var i = 0; i < routes.length; i++) {
app.get(routes[i], todo);
}