NodeJS + Express 3 – 在路由中斜线,然后固定操作

我遇到了这条路线的麻烦:

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

我想要的路线来parsingurl,其中包括:filepath参数,其中可以包括斜杠,然后一个/children操作。 (.*)是我对于:filepath参数放置正则expression式的失败尝试。

我想使用这样的schemepermalinking的目的,所以移动一些路由参数是不是一个选项,和URI编码会使他们丑陋…我环顾四周,但似乎所有的答案在stackoverflow是齿轮在url的末尾加上斜线的参数,如:

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

有任何想法吗?

谢谢!

按照gustavohenke的评论,我决定使用正则expression式路由。 这是工作代码!

  app.get(/project\/(([az]|[AZ]|[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 []数组中可用。 使用内联callback函数并使用它将数组的每个元素复制到控制器操作中的可读参数中…然后像平常一样调用控制器方法。

至于正则expression式本身,我写了\/并使用(.+)语句,这意味着“任何字符(.)至less一次( +\/正则expression式中的/ (斜杠),如果你想任何字符零次或多次使用(.*)

感谢您指点正确的方式。

这个怎么样?

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