Я не понимаю, зачем нам нужно body-parser
приложение Express, поскольку мы можем получать данные без использования body-parser
. И что это делает на самом деле и как?
node.js
express
body-parser
Джитен
источник
источник
req.body
req.headers
(массив), вы можете читать тело http-пакета, какreq.body
описано в @CleanCrispCode, и вы можете читать как параметр запроса.req.query.variable
Это помогает, поскольку Express автоматически преобразует запрос в javascript. объектыres.body
без буферизации всего потока вres.body
первую очередь.Ответы:
Для обработки
HTTP POST
запроса в Express.js версии 4 и выше, вам необходимо установить модуль промежуточного программного обеспечения с именемbody-parser
.body-parser
извлечь всю часть тела входящего потока запросов и выставить его наreq.body
.Промежуточное программное обеспечение ранее входило в состав Express.js, но теперь его нужно устанавливать отдельно.
Этот
body-parser
модуль анализирует данные в кодировке JSON, буфера, строки и URL, отправленные с использованиемHTTP POST
запроса. Установитеbody-parser
с помощью NPM, как показано ниже.редактировать в 2019-april-2: в express@4.16.0 промежуточное программное обеспечение анализатора тела в комплекте с express. для более подробной информации см. это
источник
urlencoded()
иjson()
на самом деле фабрики промежуточного программного обеспечения, которые возвращают функцию промежуточного программного обеспечения, которая вызываетnext()
Да, мы можем работать без
body-parser
. Если вы не используете его, вы получаете необработанный запрос, а ваше тело и заголовки не находятся в корневом объекте параметра запроса. Вам придется индивидуально манипулировать всеми полями.Или вы можете использовать
body-parser
, так как экспресс-команда поддерживает его.Что может сделать для вас body-parser: Это упрощает запрос.
Как использовать это: Вот пример:
устанавливать
npm install body-parser --save
Вот как использовать body-parser в экспрессе:
Ссылка на сайт.
https://github.com/expressjs/body-parser .
И тогда вы можете получить тело и заголовки в корневом объекте запроса. пример
источник
Ответ здесь объяснить это очень подробно и блестяще, ответ содержит:
Вы можете обратиться к body-parser github, чтобы прочитать их документацию, она содержит информацию о его работе.
источник
Давайте попробуем сохранить это наименее техническое.
Допустим, вы отправляете данные html-формы на сервер node-js, т.е. вы сделали запрос на сервер. Файл сервера получит ваш запрос под объектом запроса. Теперь по логике, если вы консоль записываете этот объект запроса в файл вашего сервера, вы должны увидеть данные своей формы где-то в ней, которые затем могут быть извлечены, но оу! Вы на самом деле нет!
Итак, где наши данные? Как мы его извлечем, если он присутствует не только в моем запросе.
Простым объяснением этого является то, что http отправляет данные вашей формы в виде кусочков и кусочков, которые предназначены для сборки, когда они достигают своего места назначения. Так как бы вы извлекли свои данные.
Но зачем каждый раз вручную анализировать данные на куски и собирать их? Используйте что-то под названием «body-parser», которое сделает это за вас.
body-parser анализирует ваш запрос и преобразует его в формат, из которого вы можете легко извлечь необходимую информацию.
Например, предположим, у вас есть форма регистрации на вашем веб-интерфейсе. Вы заполняете его и запрашиваете у сервера сохранить данные где-нибудь.
Извлечение имени пользователя и пароля из вашего запроса выполняется так же просто, как показано ниже, если вы используете body-parser.
Таким образом, в основном, body-parser проанализировал ваш входящий запрос, собрал куски, содержащие данные вашей формы, затем создал этот объект body для вас и заполнил его данными вашей формы.
источник
Он анализирует тело HTTP-запроса. Это обычно необходимо, когда вам нужно знать больше, чем просто URL, который вы нажимаете, особенно в контексте HTTP-запроса POST или PUT PATCH, где нужная информация содержится в теле.
По сути, это промежуточное программное обеспечение для анализа JSON, простого текста или просто возврата необработанного объекта Buffer, с которым вы можете справиться по мере необходимости.
источник
Для того, чтобы получить доступ к почтовым данным, мы должны использовать
body-parser
. По сути, это тоbody-parser
, что позволяет express читать тело, а затем разбирать его наJson
объект, который мы можем понять.источник
Это все вопрос удобства.
В принципе, если этот вопрос был «Нам нужно использовать
body-parser
? Ответ - нет'. Мы можем получить ту же информацию из клиент-пост-запроса, используя более сложный маршрут, который, как правило, будет менее гибким и увеличит объем кода, который мы должны написать, чтобы получить ту же информацию.Это своего рода такой же , как спрашивать «ли нам нужно использовать ,
express
чтобы начать?» Опять же, ответа нет, и опять же, на самом деле все сводится к тому, чтобы избавить нас от необходимости писать больше кода для выполнения основных задач, которые выражаются в «встроенном».На первый взгляд -
body-parser
облегчает получение информации, содержащейся в клиентских запросах, в различных форматах, вместо того, чтобы захватывать потоки необработанных данных и выяснять, в каком формате находится эта информация, а тем более вручную анализировать эту информацию в полезные данные.источник
Понимание тела запросов
Понимание body-parser
Согласно его документации
Как вы видели в первом примере, нам пришлось вручную анализировать поток входящих запросов, чтобы извлечь тело. Это становится утомительным, когда есть несколько данных формы разных типов. Поэтому мы используем пакет body-parser, который выполняет всю эту задачу под капотом.
Он предоставляет четыре модуля для анализа различных типов данных.
После того, как основной анализатор исходного содержимого будет использовать одну из вышеуказанных стратегий (в зависимости от промежуточного программного обеспечения, которое вы решили использовать) для анализа данных. Вы можете прочитать о них больше, прочитав их документацию.
После установки
req.body
для анализируемого тела body-parser будет вызыватьnext()
следующее промежуточное программное обеспечение в стеке, которое затем сможет получить доступ к данным запроса, не думая о том, как разархивировать и проанализировать их.источник