【问题标题】:Parenthesis around route path路径路径周围的括号
【发布时间】:2017-03-16 20:25:33
【问题描述】:

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

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

我不明白为什么路线路径周围有括号。

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

【问题讨论】:

  • 辅助路线
  • @epascarello 你能说得更具体些,而不是只说两个字吗?我通过搜索“辅助路线”得到的唯一一件事是关于角度 2,我从来没有看到整个路径路径被括号包围,只有路径的第二部分,我仍然没有得到它从只使用路径的变化照原样。谢谢
  • 就是这么叫的。我对此了解不多,因此我只发表了评论。

标签: node.js express kraken.js


【解决方案1】:

使用和不使用括号的区别在于,当你使用它们时,你会得到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"这样的字符串)作为键的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多