Есть ли какой-нибудь простой способ преобразовать данные multipart / form в массив в NodeJS?

#javascript #arrays #node.js #forms #sails.js

#javascript #массивы #node.js #формы #sails.js

Вопрос:

Я пытаюсь ввести некоторые данные, чтобы получить данные post в виде массива в Sails / NodeJS;

Когда я пытаюсь использовать этот способ, то получаю данные в виде массива идеально.

 <input type="text" class="form-control" name="answer[1][txt]">
 <input type="text" class="form-control" name="answer[1][img]">
 <input type="text" class="form-control" name="answer[2][txt]">
 <input type="text" class="form-control" name="answer[2][img]">
  

Вывод:

 answer:[ { txt: 'ans 1', img: 'yes' }, { txt: 'ans 2', img: 'yes' } ]
  

Но когда я использую атрибут enctype (enctype=»multipart / form-data») в форме, то не могу получить данные как предыдущий метод.
Вывод:

   'answer[0][txt]': 'ans 1', 'answer[0][img]': 'yes', 
'answer[1][txt]': 'ans 2','answer[1][img]': 'yes',
  

Я не знаю, что произошло, когда я использую атрибут enctype. Я хочу только сначала вернуть выходные данные с использованием атрибута enctype (multipart / form-data).
Спасибо

Комментарии:

1. почему вам нужно использовать multipart / form-data?

2. для загрузки изображений / файлов

3.Вы можете использовать POST <form> using fetch() , XMLHttpRequest() или другую функцию или можете использовать только html <form> ?

4. просто используя html-форму с express js

5. Вы можете проанализировать возвращаемые значения на стороне сервера, чтобы создать массив объектов или JSON из значений

Ответ №1:

Вы можете создать новый объект из возвращаемого в данный момент объекта; используйте for..in цикл для итерации объекта, сопоставления "txt" или "img" части свойства, присвоения значения значению существующего объекта

 let data = {
  'answer[0][txt]': 'ans 1',
  'answer[0][img]': 'yes',
  'answer[1][txt]': 'ans 2',
  'answer[1][img]': 'yes'
};

let res = {
  answer: []
};

for (let prop in data) {
  res.answer.push({
    [prop.match(/txt|img/)[0]]: data[prop]
  })
}

console.log(res);