Я знаю, как получить параметры для таких запросов:
app.get('/sample/:id', routes.sample);
В этом случае я могу использовать req.params.id
для получения параметра (например, 2
в /sample/2
).
Тем не менее, для URL, как /sample/2?color=red
, как я могу получить доступ к переменной color
?
Я пытался, req.params.color
но это не сработало.
node.js
express
query-string
Hanfei Sun
источник
источник
id
в вашей функции , как это:var sampleId = req.params.id;
.req.params.whatever
в последних версиях.req.params
отличается отreq.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiagoИспользуйте req.query для получения значения в параметре строки запроса на маршруте. Обратитесь к req.query . Скажем, если в маршруте http: // localhost: 3000 /? Name = satyam вы хотите получить значение для параметра имени, то ваш обработчик маршрута 'Get' будет выглядеть так: -
источник
Обновление:
req.param()
теперь устарело, поэтому в дальнейшем не используйте этот ответ.Ваш ответ является предпочтительным способом сделать это, однако я подумал, что могу также указать, что вы также можете получить доступ к параметрам url, post и route
req.param(parameterName, defaultValue)
.В твоем случае:
Из экспресс-гида:
Обратите внимание, что в руководстве указано следующее:
Однако на практике я обнаружил,
req.param()
что достаточно ясен и облегчает определенные виды рефакторинга.источник
Строка запроса и параметры разные.
Вы должны использовать оба в одном URL маршрутизации
Пожалуйста, проверьте приведенный ниже пример может быть полезным для вас.
Получите ссылку для прохождения вашего второго сегмента, ваш пример id: http: // localhost: port / sample / 123
Если вы столкнулись с проблемой, используйте переменную Passing в качестве строки запроса, используя '?' оператор
Получить ссылку, как этот пример: http: // localhost: port / sample? Id = 123
Оба в одном примере
Пример получения ссылки: http: // localhost: port / sample / 123? Id = 123
источник
@ Zugwait ответ правильный.
req.param()
устарел. Вы должны использоватьreq.params
,req.query
илиreq.body
.Но просто чтобы было понятнее:
req.params
будут заполнены только значениями маршрута. То есть, если у вас есть такой маршрут/users/:id
, вы можете получить доступid
либо в,req.params.id
либоreq.params['id']
.req.query
иreq.body
будут заполнены всеми параметрами, независимо от того, находятся ли они в маршруте. Конечно, параметры в строке запроса будут доступны в,req.query
а параметры в теле сообщения будут доступны вreq.body
.Поэтому, отвечая на ваши вопросы,
color
которых нет в маршруте, вы сможете получить его, используяreq.query.color
илиreq.query['color']
.источник
Экспресс-руководство говорит, что вы должны использовать req.query для доступа к QueryString.
источник
источник
Хорошая техника, которую я начал использовать с некоторыми из моих приложений в Express, - это создание объекта, который объединяет поля запроса, params и body объекта запроса Express.
Затем в теле контроллера или где-либо еще в области цепочки экспресс-запросов вы можете использовать что-то вроде следующего:
Это делает удобным и удобным просто "вникать" во все "пользовательские данные", которые пользователь, возможно, отправил со своим запросом.
Запись
Почему поле "реквизит"? Поскольку это был сокращенный фрагмент, я использую эту технику в ряде своих API, я также храню данные аутентификации / авторизации для этого объекта, пример ниже.
источник