node.js, restify — обрабатывать параметр типа массив

У меня есть сервер node.js с restify. Я хочу отправить ему запрос на получение, в котором есть массив имен. Я думаю, что запрос должен выглядеть так (но я не уверен в этом):

/users?names=bob,joe,michael,joey

Этот запрос правильный?

Как получить имена, которые я отправляю на сервер node.js?


person bobsacameno    schedule 01.08.2014    source источник
comment
попробуйте name=bob&names=joe&names=... (не уверен, но думаю, что это правильный способ добиться этого)   -  person ceadreak    schedule 01.08.2014
comment
и как мне написать функцию на сервере узла? вот так: server.get('/getDataWithNames/:names', function (req, res) { \\some stuff }); ?   -  person bobsacameno    schedule 01.08.2014


Ответы (1)


Рекомендация W3C заключается в том, что один ключ может повторяться несколько раз с несколькими значениями:

GET /users?names=bob&names=joe&names=michael&names=joey

Хорошие системы будут разработаны для обработки данных этого формата и смогут распознавать несколько ключей для их группировки в массиве.

Вам не нужно указывать переменные запроса в вашем маршруте:

// perform: GET /users?names=bob&names=joe&names=michael&names=joey
server.get('/users', function (req, res) {
  // All your query vars from the GET request are in req.query
  res.json(req.query.names);
});
person SamT    schedule 01.08.2014
comment
где я могу найти массив имен? под req.params.users? или под req.params.names? - person bobsacameno; 01.08.2014
comment
Из запроса GET вы можете получить его из req.query. Я обновил свой пост с некоторыми уточнениями. - person SamT; 01.08.2014
comment
а имена будут массивом? я получу имя, выполнив req.query.names[0] и так далее? - person bobsacameno; 01.08.2014
comment
Да, но убедитесь, что вы также сначала проверяете, что это массив: if (Array.isArray(req.query.names)) { }, так как это ввод пользователя и его можно опустить (в результате req.query.names будет undefined) - person SamT; 01.08.2014
comment
вы уверены, что это req.query.names, а не req.params.names? - person bobsacameno; 02.08.2014
comment
req.params содержит только параметры из маршрута URL. Мы указали только статический маршрут для GET /users, параметры строки запроса не зависят от маршрута и хранятся в req.query. Дополнительные сведения см. в документах Express API. - person SamT; 02.08.2014
comment
Мне было интересно, есть ли другой способ передать эти параметры. Я использую RESTKit для отправки этого запроса GET, и похоже, что он не позволяет отправлять несколько параметров с одним и тем же именем. Вы знаете о чем-нибудь? - person bobsacameno; 02.08.2014
comment
Я не могу сказать, что много знаю о RESTKit, не говоря уже о Objective-C. Однако этот тип запроса достаточно распространен, поэтому должен существовать способ. Я бы посоветовал вам открыть здесь новый вопрос с помеченными элементами, чтобы кто-то, обладающий опытом в этой области, мог лучше вам помочь. :) - person SamT; 02.08.2014
comment
Спасибо @SamT. Я открыл вопрос здесь и я также нашел ответ на него :) Большое спасибо! - person bobsacameno; 03.08.2014