处理path如/ search /:search(/ filter1 /:filter1)?

我希望能够处理这样的path

/search/:search /search/:search/filter1/:filter1 /search/:search/filter2/:filter2 /search/:search/filter1/:filter1/filter2/:filter2 

我应该如何使用restify或expressjs(或任何其他REST库)?

我知道我可以创build一个基于正则expression式的处理程序,然后parsing参数,并为每个部分手动调用处理程序,但我直觉应该有一些更简单,更结构化的使用库方法处理程序的方式。 任何意见表示赞赏。

谢谢。


[编辑]我认为的解决scheme的观点是类似于这样的:

 REST.get('/search/:search(/filter1/:filter1)?(/filter2/:filter2)?',function(req,res,next){ // handler for search where $search is always defined, // but $filter1 and $filter2 are optional }); 

现在这样解决,直到find更好的解决scheme


如果没有更好的命题,现在我这样做:

 var searchHandler = function (req,res,next){}; REST.get('/search/:search', searchHandler); REST.get('/search/:search/filter1/:filter1', searchHandler); REST.get('/search/:search/filter2/:filter2', searchHandler); REST.get('/search/:search/filter1/:filter1/filter2/:filter2', searchHandler); 

将“search”作为资源并将所有这些filter作为查询参数,可能会更好。 换句话说,做这样的事情,而不是:

 REST.get('/search',function(req,res,next){ var filter1 = req.params.filter1; if(filter1 !== undefined){ // Do something with it here. } // Etc. }); 

而你的url是这样的:

 http://localhost/search?filter1=green