Как определить сложные маршруты с именованными параметрами в express.js? - PullRequest
14 голосов
/ 16 мая 2011

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

// The following routes should be matched based on parameters provided:
// GET /books/:category/:author
// GET /books/:category/:author/limit/:limit
// GET /books/:category/:author/skip/:skip
// GET /books/:category/:author/limit/:limit/skip/:skip
// GET /books/:category/:author/sort/:sortby
// GET /books/:category/:author/sort/:sortby/limit/:limit
// GET /books/:category/:author/sort/:sortby/skip/:skip
// GET /books/:category/:author/sort/:sortby/limit/:limit/skip/:skip
app.get('/books/:category/:author/(sort/:sortby)?/(limit/:limit)?/(skip/:skip)?', myController.index);

Как видите, я пытаюсь сгруппировать необязательные параметры с помощью (paramKey/paramValue)?.Таким образом, я надеялся, что смогу «смешивать и сопоставлять» необязательные параметры, все еще используя именование параметров.К сожалению, это, похоже, не работает.

Есть ли способ заставить это работать без необходимости писать прямые регулярные выражения и добавлять дополнительную логику для анализа любых результирующих групп параметров на основе индекса?

По сути, я ищу простой способ парсинга пар ключ / значение из маршрута.

Ответы [ 2 ]

18 голосов
/ 20 мая 2011

Похоже, вы хотите повторно реализовать строку запроса, используя URL-путь.Я думаю, что если вы действительно этого хотите, да, вам придется написать свою собственную логику синтаксического анализа / интерпретации.AFAIK параметры экспресс-пути являются позиционными, а строка запроса - нет.Просто используйте строку запроса и экспресс автоматически проанализирует ее для вас.

/books?category=sports&author=jack&limit=15?sortby=title

Это позволит вам сделать

req.query.sortby

Вы можете получить экспресс, чтобы сделать 1/2синтаксического анализа для вас с путем регулярного выражения, например (:key/:value)* или чем-то подобным в этих строках (который будет соответствовать нескольким парам ключ / значение), но в этом случае экспресс не будет анализировать эти результаты для вас.

6 голосов
/ 01 августа 2012

Вы можете отправить данные для просмотра следующим образом:

//in the server side ...
 app.get('/search/:qkey/:qvalue', function(req, res){
    res.write(JSON.stringify({
      qkey:req.params.qkey;
      qvalue:req.params.qvalue;
    }));
 });

и на стороне клиента ... звоните в ajax

$.ajax({
  type:"POST",
  url:"/search/"+qkey+"/"+qvalue,
  success: function(data){
    var string = eval("(" + data + ")");
    //you access to server response with
    console.log(string.qkey+" and "+ string.qvalue);
  }
});    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...