处理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