Я не понимаю, зачем нам body-parser
в приложении Express, так как мы можем получить данные без использования body-parser
.
И что он делает на самом деле и как?
Что делает тело-парсер с выражением?
Ответ 1
Для обработки HTTP POST
запроса в Express.js версии 4 и выше вам необходимо установить модуль промежуточного программного обеспечения, называемый body-parser
.
body-parser
извлекает всю часть тела входящего потока запросов и выставляет его на req.body
.
Промежуточное программное обеспечение ранее входило в состав Express.js, но теперь его нужно устанавливать отдельно.
Этот модуль body-parser
анализирует данные в кодировке JSON, буфера, строки и URL, отправленные с использованием HTTP POST
запроса HTTP POST
. Установите body-parser
используя NPM, как показано ниже.
npm install body-parser --save
редактировать в 2019-april-2: в [email protected] промежуточное программное обеспечение анализатора тела в комплекте с express. для более подробной информации см. это
Ответ 2
Да, мы можем работать без body-parser
. Если вы не используете его, вы получаете необработанный запрос, а ваше тело и заголовки не находятся в корневом объекте параметра запроса. Вам придется индивидуально манипулировать всеми полями.
Или вы можете использовать body-parser
, так как экспресс-команда поддерживает его.
Что может сделать для вас body-parser: Это упрощает запрос.
Как использовать это: Вот пример:
Установить npm install body-parser --save
Вот как использовать body-parser в экспрессе:
const express = require('express'),
app = express(),
bodyParser = require('body-parser');
// support parsing of application/json type post data
app.use(bodyParser.json());
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));
Ссылка на сайт.
Ответ 3
Ответ здесь объясняет это очень подробно и блестяще, ответ содержит:
Короче; body-parser извлекает всю часть тела входящего потока запросов и предоставляет его на
req.body
как что-то более легкое для взаимодействия. Вам это не нужно само по себе, потому что вы могли бы все это сделать сами. Тем не менее, он, скорее всего, сделает то, что вы хотите, и избавит вас от неприятностей.Пойти немного глубже; body-parser дает вам промежуточное программное обеспечение, которое использует nodejs/zlib, чтобы разархивировать входящие данные запроса, если он заархивирован, а stream-utils/raw-body ждет полного, необработанного содержимого тела запроса до "разбора" (это означает, что if вы не собираетесь использовать тело запроса, вы просто потратили впустую какое-то время).
После того, как содержимое будет сырым, body-parser проанализирует его, используя одну из четырех стратегий, в зависимости от конкретного промежуточного программного обеспечения, которое вы решили использовать:
bodyParser.raw(): фактически не анализирует тело, а просто
req.body
буферное содержимое из буфера вreq.body
.bodyParser.text(): Читает буфер как обычный текст и предоставляет результирующую строку на req.body.
bodyParser.urlencoded(): анализирует текст в виде URL-кодированных данных (как браузеры, как правило, отправляют данные формы из обычных форм, установленных в POST) и предоставляет результирующий объект (содержащий ключи и значения) для
req.body
. Для сравнения; в PHP все это автоматически выполняется и отображается в$_POST
.bodyParser.json(): анализирует текст как JSON и
req.body
результирующий объект наreq.body
.Только после установки
req.body
в желаемое содержимое он вызовет следующее промежуточное программное обеспечение в стеке, которое затем сможет получить доступ к данным запроса, не задумываясь о том, как его распаковать и проанализировать.
Вы можете обратиться к github body-parser, чтобы прочитать их документацию, в нем содержится информация о его работе.
Ответ 4
Давайте попробуем сохранить это наименее техническое.
Допустим, вы отправляете данные формы html на сервер node-js, т.е. Вы сделали запрос на сервер. Файл сервера получит ваш запрос под объектом запроса. Теперь по логике, если вы консолируете этот объект запроса в своем файле сервера, вы должны увидеть данные своей формы где-то в нем, которое можно было бы извлечь тогда, но whoa! вы на самом деле не!
Итак, где наши данные? Как мы его извлечем, если это не только в моей просьбе.
Простое объяснение этому - http отправляет ваши данные формы в биты и куски, которые предназначены для сборки по мере их достижения. Итак, как бы вы извлекли свои данные.
Но почему бы не причинить этой боли каждый раз ручную разборку ваших данных за куски и сборку. Используйте что-то, называемое "body-parser", которое сделает это за вас.
body-parser анализирует ваш запрос и преобразует его в формат, из которого вы можете легко извлечь нужную информацию, которая вам может понадобиться.
Например, скажем, у вас есть форма регистрации в вашем интерфейсе. Вы заполняете его и запрашиваете сервер, чтобы где-то сохранять данные.
Извлечение имени пользователя и пароля из вашего запроса выполняется так же просто, как показано ниже, если вы используете body-parser.
var loginDetails = {
username : request.body.username,
password : request.body.password
};
Таким образом, body-parser проанализировал ваш входящий запрос, собрал куски, содержащие ваши данные формы, а затем создал этот объект тела для вас и заполнил его данными формы.
Ответ 5
Он анализирует тело запроса HTTP. Это обычно необходимо, когда вам нужно знать больше, чем только URL-адрес, который вы нажимаете, особенно в контексте HTTP-запроса POST или PUT PATCH, где информация, которую вы хотите, содержится в теле.
В основном это промежуточное программное обеспечение для разбора JSON, обычного текста или просто возврата необработанного объекта Buffer, с которым вам нужно иметь дело, как вам нужно.
Ответ 6
Думал, что это старый вопрос, но он может помочь кому-то, вместо использования bodyParser промежуточного программного обеспечения мы можем использовать эти утилиты от express.
Если вы хотите проанализировать json в конечной точке, используйте express.json()
middleware. Если вы хотите использовать конечную точку json и urlencoded, используйте [express.json(), express.urlencoded()]
для вашего промежуточного программного обеспечения.
Если вы хотите, чтобы пользователи загружали файлы на конечную точку, вы можете использовать express.multipart()
и не забудьте очистить все созданные временные файлы.
Ответ 7
Чтобы получить доступ к сообщениям, мы должны использовать body-parser
. В основном, что body-parser
, которое позволяет выразить читать тело, а затем анализировать его в объект Json
, который мы можем понять.
Ответ 8
Все это дело удобства.
В принципе, если вопрос: "Нужно ли использовать body-parser
?" Ответ - нет'. Мы можем придумать ту же самую информацию из клиент-пост-запроса, используя более крутой маршрут, который обычно будет менее гибким и увеличит количество кода, который мы должны написать, чтобы получить ту же информацию.
Это похоже на вопрос: "Нужно ли использовать express
для начала?" Опять же, ответа нет, и снова, действительно, все сводится к тому, чтобы избавить нас от хлопот написания большего количества кода, чтобы делать основные вещи, которые выражаются, с "встроенным".
На поверхности - body-parser
упрощается доступ к информации, содержащейся в клиентских запросах, в разных форматах, вместо того, чтобы вы захватывали необработанные потоки данных и выясняли, в каком формате находится информация, а тем более вручную эту информацию в пригодные для использования данные.
Ответ 9
позвольте мне пояснить, почему мы используем парсер для тела?
Средство разбора тела Node.js.
Разбирайте входящие запросы в промежуточном программном обеспечении перед вашими обработчиками, доступными под свойством req.body.
Примечание. Поскольку форма req.body основана на управляемом пользователем входе, все свойства и значения в этом объекте недоверены и должны быть проверены перед доверием. Например, req.body.foo.toString() может терпеть неудачу несколькими способами, например, свойство foo может быть не там или не может быть строкой, а toString может не быть функцией, а вместо этого строкой или другим пользователем.
Установка (локализация в папку проекта)
npm install body-parser
OR npm я body-parser
Теперь добавьте это в свой основной файл или файл js, который вы определили в package.json
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
Для получения дополнительных разъяснений перейдите по ссылке https://www.npmjs.com/package/body-parser