Parenthesis around route path

1k views Asked by At

I found this piece of code in a project using kraken and express

module.exports = function (router) {
    router.get('(/)', .....);
    router.get('(/nfc/read)', .....);
}

and I don't get why there are parenthesis around the routes paths.

Does it change something ? I can't find anything about it on the documentation of express and kraken. In the rest of the whole project all the other routes are normal, without parenthesis.

1

There are 1 answers

0
rsp On BEST ANSWER

The difference between using and not using the parentheses is that when you use them then you will get the paths in req.params.

For example in this example:

let app = require('express')();
app.get('/abc', (req, res) => {
    console.log(req.params[0]);
});
app.listen(3333, () => console.log('http://localhost:3333/'));

what will be printed is undefined. But in this example:

let app = require('express')();
app.get('(/abc)', (req, res) => {
    console.log(req.params[0]);
});
app.listen(3333, () => console.log('http://localhost:3333/'));

what will be printed is /abc.

If there are more parentheses, there will be more elements in req.params. For example here:

let app = require('express')();
app.get('(/a)(bc)', (req, res) => {
    console.log(req.params[0]);
    console.log(req.params[1]);
});
app.listen(3333, () => console.log('http://localhost:3333/'));

the same /abc route would be matched but what would be printed is:

/a
bc

That is because the route is parsed as a regex and parentheses are capturing groups. See:

Note that req.params is actually an object, not an array. This would return false:

console.log(Array.isArray(req.params));

It is just an object that happens to have numbers (actually strings like "0" and "1") as its keys.