Подтвердить что ты не робот

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' }
   ]
}
4b9b3361

Ответ 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