NodeJS + Express 3 - 在Route中斜线,然后是固定操作

时间:2013-09-30 12:55:21

标签: regex node.js routing

我遇到这条路线的问题:

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);

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

根据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 []数组中可用。使用内联回调函数并使用它将数组的每个元素复制到控制器操作中的人类可读参数...然后正常调用控制器方法。

至于正则表达式本身,我通过编写/并在其中使用\/语句来逃避正则表达式中的(.+)(斜杠),这意味着“任何字符{{1至少一次((.))。如果您想要任何字符零次或多次,您将使用+

感谢您指出了正确的方法。

答案 1 :(得分:2)

这个怎么样?

app.get('/project/:handle/browse/:filepath*/children', function(req, res) {
  var filepath = req.params.filepath + (req.params[0] || '');
   ...
});