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] || ''); ... });