我在使用kraken和express
的项目中找到了这段代码module.exports = function (router) {
router.get('(/)', .....);
router.get('(/nfc/read)', .....);
}
我不知道为什么路线路径周围有括号。
它改变了什么吗?我在express和kraken的文档上找不到任何关于它的内容。 在整个项目的其余部分,所有其他路线都是正常的,没有括号。
答案 0 :(得分:3)
使用和不使用括号之间的区别在于,当您使用它们时,您将获得req.params
中的路径。
例如,在此示例中:
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
这是因为路由被解析为正则表达式而括号是捕获组。参见:
请注意req.params
实际上是一个对象,而不是一个数组。这将返回false
:
console.log(Array.isArray(req.params));
这只是一个碰巧有数字(实际上是"0"
和"1"
等字符串)的对象。