2015-11-30 26 views
1

我希望能够处理这样的人处理路径(如/ search /:search(/ filter1 /:filter1))?

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

路径我应该怎么做,使用的RESTify或expressjs(或任何其他REST LIB)?我知道我可以创建一个基于正则表达式的处理程序,然后解析参数并为每个部分调用手动处理程序,但我直观地认为应该有一些更容易和更结构化的使用库的方法链接处理程序的方式。任何建议表示赞赏。

谢谢。


[编辑] 我的pervect解决方案的看法是与此类似:由即日起至更好的解决方案

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

解决类似这样的发现


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

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

回答

1

将'search'作为资源和所有那些过滤器作为查询参数,可能会更好。换句话说,做这样的事情,而不是:

REST.get('/search',function(req,res,next){ 
    var filter1 = req.params.filter1; 

    if(filter1 !== undefined){ 
     // Do something with it here. 
    } 

    // Etc. 
}); 

以及您的网址会是这个样子:

http://localhost/search?filter1=green 
+0

,我知道我能做到这一点,只是希望让它更好,像友好的网址:) 不管怎样,谢谢。 – dmikam