路线路径周围的括号

时间:2017-03-15 14:00:29

标签: node.js express kraken.js

我在使用kraken和express

的项目中找到了这段代码
module.exports = function (router) {
    router.get('(/)', .....);
    router.get('(/nfc/read)', .....);
}

我不知道为什么路线路径周围有括号。

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

1 个答案:

答案 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"等字符串)的对象。