处理路径如/ search /:search(/ filter1 /:filter1)?

时间:2015-11-30 10:18:55

标签: node.js rest express chaining restify

我希望能够处理像这样的路径

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

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

我知道我可以基于正则表达式创建一个处理程序,然后解析参数并为每个部分调用手动处理程序,但我觉得应该有一些更容易和更结构化的方法来链接处理程序使用库的方法。任何建议都表示赞赏。

感谢。

[编辑] 我对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 个答案:

答案 0 :(得分:1)

你最好不要考虑搜索'作为资源和所有那些过滤器作为查询参数。换句话说,做一些这样的事情:

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