Как получить данные вложенной формы в express.js?

В Rails, если у вас есть форма с символами подчеркивания, она примет вложенную структуру макета в параметрах:

<input type="text" name="person_first" />
<input type="text" name="person_last" />

На сервере вы получите:

params #=> { person: { first: "Tom", last: "Hanks" } }

Когда я использую Express.js в node.js, bodyparser, похоже, не делает то же самое. Рассматривая код для bodyparser, он просто запускает парсер JSON на нем, в результате чего:

params #=> { person_first: "Tom", person_last: "Hanks" } }

Есть ли способ получить данные вложенной формы, например, в Rails, когда я использую Express? Есть ли библиотека, которая позволяет мне это делать?

Ответ 1

Если вы используете express.bodyParser, вы можете использовать нотацию массива для передачи вложенных данных.

Добавьте express.bodyParser промежуточное ПО перед вашими контроллерами.

app.use(express.bodyParser());

Теперь вы можете использовать это обозначение в своем html-коде:

<input type="text" name="person[first]" />
<input type="text" name="person[last]" />

или

<input type="text" name="person[name][first]" />
<input type="text" name="person[name][last]" />

Обновление для Express 4

Ключевым здесь является установка extended: true

app.use(bodyParser.urlencoded({
  extended: true
}));