2015-11-30 65 views
1

我希望能夠處理這樣的人處理路徑(如/ search /:search(/ filter1 /:filter1))?

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

回答

1

將'search'作爲資源和所有那些過濾器作爲查詢參數,可能會更好。換句話說,做這樣的事情,而不是:

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 
+0

,我知道我能做到這一點,只是希望讓它更好,像友好的網址:) 不管怎樣,謝謝。 – dmikam