路由路径的括号
Parenthesis around route path
我在一个使用kraken和express的项目中找到了这段代码
module.exports = function (router) {
router.get('(/)', .....);
router.get('(/nfc/read)', .....);
}
我不明白为什么路由路径周围有括号。
它改变了什么吗?我在 express 和 kraken 的文档中找不到任何相关信息。
整个项目的其余部分,所有其他路线都是正常的,没有括号。
使用和不使用括号的区别在于,当您使用它们时,您将获得 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
其实是一个对象,不是数组。这将 return false
:
console.log(Array.isArray(req.params));
它只是一个对象,恰好有数字(实际上是 "0"
和 "1"
这样的字符串)作为它的键。
我在一个使用kraken和express的项目中找到了这段代码
module.exports = function (router) {
router.get('(/)', .....);
router.get('(/nfc/read)', .....);
}
我不明白为什么路由路径周围有括号。
它改变了什么吗?我在 express 和 kraken 的文档中找不到任何相关信息。 整个项目的其余部分,所有其他路线都是正常的,没有括号。
使用和不使用括号的区别在于,当您使用它们时,您将获得 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
其实是一个对象,不是数组。这将 return false
:
console.log(Array.isArray(req.params));
它只是一个对象,恰好有数字(实际上是 "0"
和 "1"
这样的字符串)作为它的键。