【问题标题】:Processing paths like /search/:search(/filter1/:filter1)?像 /search/:search(/filter1/:filter1) 这样的处理路径?
【发布时间】:2015-11-30 10:18:55
【问题描述】:

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

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

【问题讨论】:

    标签: node.js rest express chaining restify


    【解决方案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
    

    【讨论】:

    • 我知道我可以做到这一点,但只是想让它变得更好,比如友好的 url :) 无论如何谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多