Node.js - отправлять и принимать Array как GET/POST с помощью запроса
У меня есть следующий код, но он не работает:
var post_req = {
array: [
[ {
param1: 'something',
param2: 123
} ],
[ ],
[ ],
[ {
param2: 'something',
param4: 1234,
param1: 'hello'
} ]
]
};
var data_send = querystring.stringify(post_req);
var request = client.request('POST', '/', headers);
request.end(data_send);
и
if( req.method == 'POST' ) {
req.addListener('data', function(chunk)
{
POST = querystring.parse(chunk);
console.log(POST);
}
}
В итоге я получаю 5 поддиапазонов, соответствующих 5 параметрам в объектах, но с дополнительными символами '] [' в их именах:
{ array:
[ { '][param1': 'something' }
, { '][param2': '123' }
, { '][param2': 'something' }
, { '][param4': '1234' }
, { '][param1': 'hello' }
]
}
Ответы
Ответ 1
Существует новый пакет node, который исправляет это: "npm install qs".
https://github.com/visionmedia/node-querystring
"для строки node для поддержки вложенности, поскольку она была удалена из файла 0.3.x, поэтому эта библиотека обеспечивает предыдущее и обычно желаемое поведение (и вдвое быстрее)"
Если кто-нибудь скажет мне, почему он был удален с 0.3.x, я дам вам свой комментарий для вашего комментария. (Я хочу, чтобы моя уверенность в восстановлении Node.js.)
Ответ 2
Чтобы подтвердить мой комментарий выше, функция node querystring.stringify
не будет обрабатывать вложенные массивы (на момент написания).
Вы можете увидеть источник stringify в https://github.com/ry/node/blob/master/lib/querystring.js
Обратите внимание, что он обрабатывает один уровень массивов, но он не перезаписывает. Когда он находит массив, он использует stringifyPrimitive
для кодирования значений массива. Вы можете видеть, что stringifyPrimitive
не обрабатывает массивы, только число, логическое и строковое.
Как я и предложил в своем комментарии, учитывая, что вы используете POST-запрос, лучшей идеей будет использование JSON-кодирования для вашей сложной структуры данных.
Или используйте https://github.com/visionmedia/node-querystring, как предложено @FriendlyDev
Ответ 3
Не используйте querystring.parse для воссоздания объекта JSON, отправленного как строка. Вместо этого используйте JSON.parse. И используйте JSON.stringify вместо querystring.stringify
querystring полезна при отправке параметра, закодированного в URL-адресе или при отправке формы. Но нет смысла использовать его, если вы отправляете только один объект JSON со всеми вашими данными.
В вашем сценарии я бы отклонил библиотеку querystring и использовал библиотеку JSON, которая уже включена. Это было бы более чистым и быстрым.
http://www.json.org/js.html