regex - NodeJS + Express 3 - Route 中的斜线然后固定操作

标签 regex node.js routes

我在这条路线上遇到了问题:

app.get('/project/:handle/browse/:filepath(.*)/children', files.children);                          //getting contents of any node in the directory structure

我希望路由解析包含 :filepath 参数(可以包含斜杠)的 url,然后是 /children 操作。 (.*) 是我对 :filepath 参数设置正则表达式限制的失败尝试。

我想使用这样的方案来实现永久链接,因此将一些路由参数移动到参数不是一个选项,并且 URI 编码会使它们变得丑陋......我环顾四周,但似乎所有答案都在stackoverflow 适合在 url 末尾带有斜杠的参数,例如:

app.get('/project/:path', files.children);

有什么想法吗?

谢谢!

最佳答案

根据 gustavohenke 的评论,我决定使用正则表达式路由。这是工作代码!

    app.get(/project\/(([a-z]|[A-Z]|[0-9])+)\/browse\/(.+)\/children/,
        function(req,res)
        {
            req.params.handle = req.params[0];     //project handle
            req.params.filepath = req.params[2];   //relative path
            files.children(req, res);
        }
    );                          //getting contents of any node in the directory structure

诀窍是要知道,每当您在路由中使用 (something) 部分时,url 的每个“切片”都将在 req.params[] 数组中可用。使用内联回调函数,并使用它将数组的每个元素复制到 Controller 操作中人类可读的参数...然后正常调用 Controller 方法。

对于正则表达式本身,我通过编写 \/ 转义了正则表达式中的 / (斜杠),并使用了 (.+) 语句,这意味着“任何字符 (.) 至少一次 (+)。如果您想要任何字符零次或多次,您可以使用 (.*)

感谢您为我指明了正确的方向。

关于regex - NodeJS + Express 3 - Route 中的斜线然后固定操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094844/

相关文章:

regex - 如何让我的 Perl one-liner 仅显示文件中的第一个正则表达式匹配项?

javascript - 内部 REST API 安全性

junit - 如何在 Apache Camel 中对生产路线进行单元测试?

ruby-on-rails - 我可以在 Controller 中设置默认命名空间路由吗

javascript - 使用 AngularJS 进行子域路由

python - 将\n\t 等转义字符替换为\\t ,\\n

java - 考虑捕获组中的空白

javascript - 请解释 RegExp javascript 行为

node.js - 覆盖低级 node.js 模块

javascript - Node.js 套接字可以处理多个写入消息吗?奇怪的错误