node.js - 处理/search/:search(/filter1/:filter1)?等路径

标签 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库)来做到这一点?

我知道我可以基于正则表达式创建一个处理程序,然后解析参数并手动调用每个部分的处理程序,但我直觉应该有一些更简单、更结构化的方法来使用库的方法链接处理程序。如有任何建议,我们将不胜感激。

谢谢。

<小时/>

[编辑] 我对完美解决方案的看法与此类似:

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

最佳答案

您最好将“搜索”视为资源,并将所有这些过滤器视为查询参数。换句话说,请执行以下操作:

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

关于node.js - 处理/search/:search(/filter1/:filter1)?等路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996191/

相关文章:

node.js - node-orm2 中的引用键

rest - 将单例作为 Tomcat servlet 注入(inject) JAX-RS (Jersey) 资源

node.js - Expressjs 如何仅在一条路线上启用 CORS?

node.js - Express 4 - 一个数据库连接实例(redis)

json - REST 授权 : Username/Password in Authorization Header vs JSON body

javascript - 从原始查询中解析模型和关联 hasMany

javascript - 方法返回 id 但不保存其他数据点

javascript - MongoError : Authentication failed. - 连接到 MongoLab 时遇到问题

node.js - 在node js中通过xml privateKey对字符串进行签名

php - 如果要遵循 REST 架构,如何访问 codeigniter 中的 URL 参数?