Multipart/form-data с массивами

У меня есть простая форма:

<form method="post" action="/test">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

С контроллером:

//...
server.post('/test', function(req, res) {
    res.json(req.body);
});
//...

Это возвращает хорошо с:

{
  arr: [
    "val1",
    "val2",
    "val3"
  ]
}

Однако, когда я изменяю enctype на multipart/formdata

<form method="post" action="/test" enctype="multipart/form-data">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

Сервер теперь отвечает:

{
  arr[]: "val3"
}

В чем проблема? Мне нужна какая-то конфигурация?

Если вам интересно, я также отправляю файл, поэтому мне нужно multipart/form-data,

1 ответ

Вероятно, это связано с использованием body-parser (особенно urlencoded метод), который по умолчанию работает на запросы с медиа-типом application/x-www-form-urlencoded только.

Ваш основной модуль приложения, вероятно, имеет несколько строк, подобных этим:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());

Я полагаю, вы могли бы просто добавить следующее, чтобы иметь запросы типа multipart/form-data разобрал так же:

app.use(bodyParser.urlencoded({
  type: 'multipart/form-data'
}));
Другие вопросы по тегам