2015-11-30 6 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)?

Я знаю, что могу создать обработчик на основе регулярных выражений, а затем проанализировать аргументы и обработать вручную обработчики для каждой части, но я предполагаю, что должен быть более простой и более структурный способ привязки обработчиков с использованием методов библиотеки. Любые советы приветствуются.

Спасибо.


[EDIT] Мой взгляд на решение 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

Возможно, вам лучше подумать о поиске в качестве ресурса и всех этих фильтров в качестве параметров запроса. Другими словами, сделать что-то вроде этого, вместо:

REST.get('/search',function(req,res,next){ 
    var filter1 = req.params.filter1; 

    if(filter1 !== undefined){ 
     // Do something with it here. 
    } 

    // Etc. 
}); 

И ваш URL будет выглядеть примерно так:

http://localhost/search?filter1=green 
+0

Я знаю, что я мог бы сделать это, но просто хотел, чтобы сделать его лучше, как дружественные URLs :) В любом случае, спасибо. – dmikam