2015-08-06 2 views
0

Я пытаюсь получить param из объекта запроса, используя следующий код.Ошибка при получении параметров из объекта запроса, содержащего символ `&`

module.exports = function (req, res) { 

    var query = req.query; 
    var data = JSON.parse(query.param1); 
} 

Это нормально работает для большинства случаев.

param1 Если содержит & характер, то query.param1 получить значения перед & и следующие значения рассматриваются как новый param. например localhost/?param1={"url":"http://s.test.com/x?format=jsonp&id=a&callback=b"}

Редактировать оригинальный URL уже encoded

localhost/?param1=%7B%22url%22%3A%22http%3A%2F%2Fs.test.com%2Fx%3Fformat%3Djsonp%26id%3Da%26callback%3Db%22%7D

в этом случае я получаю param1 = {"url":"http://s.test.com/x?format=jsonp

, который не является действительным json, поэтому я получаю ошибка, в настоящее время мы решили ее с помощью regex (удаление localhost/?param1= части URL).

Какой лучший способ справиться с этим прецедентом?

Edit: серверная среда

centos 6.5 server

node v0.12.7

[email protected]

+0

Я не могу воспроизвести это с помощью выражения 'express @ 4.13.3' (пробовал как парсеры' simple', так и 'extended'). – robertklep

+0

@robertklep, используя 'express @ 4.13.3', все еще получая ошибку, поэтому версия exprress не проблема, пожалуйста, проверьте отредактированный вопрос для других серверных сред. –

+0

Вот [gist] (https://gist.github.com/robertklep/1fceb84ed3eeb6d4df6d) с кодом, который я использовал для тестирования. – robertklep

ответ

0

req.query уже есть объект с курьерским:

Объект, содержащий свойство для каждого параметра строки запроса в маршруте. Если строки запроса нет, это пустой объект, {}.

req.query documentation

0

Вы должны кодировать URL перед вызовом nodejs API. И на стороне nodejs вам нужно декодировать URL-адрес, чтобы получить правильные параметры.

+0

Оригинальный url уже закодирован, пожалуйста, проверьте отредактированный вопрос –

Смежные вопросы