Невозможно сделать почтовый запрос, содержащий массив в узле - PullRequest
0 голосов
/ 01 июля 2018

Я новичок, который несколько дней стучал головой об этой проблеме, с которой я по-настоящему застрял.

По сути, я просто хочу сделать запрос с использованием узла и экспресса. Объект будет создаваться динамически, но это мой жестко закодированный пример. myObj содержит массив, потому что я хочу сделать одну вставку в базу данных для каждого элемента позже на стороне сервера.

let myObj = {
        id: 50,
        damage_type: ["missing", "broken", "light"]
      }

// Parse myObj to JSON string to be sent
let myjsonObj = JSON.stringify(myObj);
console.log(myjsonObj );
// {"poi":50,"damage_type":["missing","broken","light"]}
postDamage(myjsonObj )

function postDamage(damage) {
  $.post({
    type: 'POST',
    url: '/damage',
    data: damage
  }).
  done(function (damage) {
    // Do things
}


router.post('/damage', (req, res) => 
{ 
  let data = req.body;
  console.log(data)

// This is what I get in the node terminal which is nonsense, I cannot work with 
{ '{"id":50,"damage_type":["missing","broken","light"]}': '' }

I expect it to look like {"id":50,"damage_type":["missing","broken","light"]}
So I can loop through the damage_type creating new objects with this structure
createSQLfunction({id:50, damage_type:"missing"})

});

Если я не распишу строку myObj, терминал узла печатает {poi:'50', 'damage_type[]: [ 'missing','broken','light']} Откуда берется дополнительный []?!

Что я делаю не так, чтобы не отправлять массив внутри объекта на серверную часть?

1 Ответ

0 голосов
/ 01 июля 2018

с сайта jquery:

данные

Тип: PlainObject или String или Array

Данные для отправки на сервер. Он преобразуется в строку запроса, если это еще не строка. Он добавляется в URL для GET-запросов. См. Параметр processData для предотвратить эту автоматическую обработку. Объект должен быть парой ключ / значение. Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом на основе значения традиционной настройки (описанной ниже).

Параметр traditional выглядит так: кодируется ли он как key[]=val1&key[]=val2 или просто key=val1&key=val2. Можешь попробовать, YMMV.

Или вы могли бы упростить свою жизнь и просто сериализовать json самостоятельно, вместо того, чтобы возиться с URL-кодировкой jquery.

* Изменить: В ответ на ваш вопрос о передовых методах: еще до того, как представления формы JavaScript стали популярными, двумя стандартными способами отправки формы были application/x-www-form-urlencoded или multipart/form-data. Последний в основном использовался, если у вас были файлы, которые вы отправляли с формой.

Однако с появлением форм представления JavaScript XHR (ajax) стало гораздо более распространенным / популярным использование JSON вместо любого из этих форматов. Так что нет абсолютно ничего плохого в том, чтобы делать что-то вроде data: JSON.stringify(object), когда вы отправляете свои данные, а затем просто указываете своему серверу читать JSON.

На самом деле это возможно и проще, и быстрее. И это очень популярный метод, поэтому не стоит беспокоиться о том, чтобы идти против современной передовой практики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...