括号内的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)作为它的键。