括号内的pathpath

我在一个使用kraken和express的项目中find了这段代码

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

我不明白为什么在pathpath上有括号。

它会改变什么吗? 在express和kraken的文档中我找不到任何关于它的信息。 在整个项目的其余部分,所有其他路线都是正常的,没有括号。

使用和不使用括号之间的区别是,当你使用它们时,你会得到req.params的path。

例如在这个例子中:

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

什么将被打印是undefined 。 但在这个例子中:

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

将打印什么是/abc

如果有更多的括号, req.params会有更多的元素。 例如这里:

 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/')); 

相同的/abc路线将被匹配,但将被打印的是:

 /a bc 

这是因为路线被parsing为一个正则expression式,圆括号是捕获组。 看到:

请注意, req.params实际上是一个对象,而不是一个数组。 这将返回false

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

它只是一个碰巧有数字的对象(实际上是"0""1"这样的string)作为它的键。