我希望能够处理这样的路径
/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/