2016-07-11 4 views
97

Я не понимаю, зачем нам body-parser в экспресс-приложении, так как мы можем получить данные без использования body-parser. И что он делает на самом деле и как?Что делает тело-парсер с выражением?

+12

, чтобы читать данные POST HTTP, мы должны использовать модуль узла «тело-парсер». body-parser - кусок экспресс-промежуточного программного обеспечения, который считывает входной сигнал формы и сохраняет его как объект javascript, доступный через 'req.body' – refactor

+1

С помощью express вы можете читать любые данные внутри HTTP-запроса, такие как заголовки' req.headers' (массив), вы можете прочитать тело http-пакета как 'req.body', объясненное @CleanCrispCode, и вы можете прочитать его как параметр запроса' req.query.variable'. Это помогает, поскольку express автоматически преобразует запрос в объекты javascript. –

+0

Оформить мой ответ, может быть, это поможет вам –

ответ

8

Думал это старый вопрос, но это может помочь кому-то, вместо того, чтобы использовать bodyParser промежуточного ПО мы можем использовать эти утилиты с выразить.

Если вы хотите разобрать json в своей конечной точке, используйте промежуточное программное обеспечение express.json(). Если вы хотите использовать json и urlencoded конечную точку, используйте [express.json(), express.urlencoded()] для вашего промежуточного программного обеспечения.

Если вы хотите, чтобы пользователи загружали файлы на конечную точку, вы можете использовать express.multipart() и не забудьте очистить все созданные временные файлы.

+9

Im учится и думает реализовать эту стратегию, видя, как я ненавижу добавлять больше модулей и других вещей, если у экспресса уже есть это, но, как оказалось, его больше не связывают с выражением и должны быть установлен отдельно. Просто поместите здесь здесь обновленную информацию. – somdow

47

Для обработки HTTP POST запроса в Express.js версии 4 и выше, вам необходимо установить модуль промежуточного программного обеспечения под названием body-parser.

body-parser извлекает всю часть входящего потока запроса и выставляет его на req.body.

Это промежуточное ПО было частью Express.js ранее, но теперь вы должны установить его отдельно.

Этот модуль body-parser анализирует данные JSON, буфера, строки и URL-адреса, отправленные с использованием запроса HTTP POST. Установите body-parser, используя NPM, как показано ниже.

npm install body-parser --save 
3

Для того, чтобы получить доступ к сообщению данных, которые мы должны использовать body-parser. В основном, что делает body-parser, что позволяет выразить читать тело, а затем анализировать его на объект Json, который мы можем понять.

4

Он анализирует тело запроса HTTP. Это обычно необходимо, когда вам нужно знать больше, чем только URL-адрес, который вы нажимаете, особенно в контексте HTTP-запроса POST или PUT PATCH, где информация, которую вы хотите, содержится в теле.

В основном это промежуточное программное обеспечение для синтаксического анализа JSON, простого текста или просто возврата необработанного объекта Buffer, с которым вы имеете дело, как вам нужно.

3

Все это дело удобства.

В принципе, если вопрос был «У нас необходимо использовать body-parser? ' Ответ - нет'. Мы можем придумать ту же самую информацию из клиент-пост-запроса, используя более крутой маршрут, который обычно будет менее гибким и увеличит количество кода, который мы должны написать, чтобы получить ту же информацию.

Это похоже на вопрос: «Нужно ли нам Нужно использовать express для начала? Опять же, ответа нет, и снова, действительно, все сводится к тому, чтобы спасти нас от хлопот написания большего количества кода, чтобы делать основные вещи, которые выражаются, с «встроенным».

На поверхности - body-parser упрощает доступ к информации, содержащейся в клиентских запросах, в различных форматах вместо того, чтобы вы захватывали необработанные потоки данных и выясняли, в каком формате находится информация, а тем более вручную разбираете информацию в пригодные для использования данные.

3

Ответ here объяснить это очень подробно и блестяще, ответ содержит:

Короче; body-parser извлекает всю часть тела входящего потока запросов и предоставляет его на req.body как нечто более легкое для взаимодействия. Вам это не нужно само по себе, потому что вы могли бы все это сделать сами. Тем не менее, он, скорее всего, сделает то, что вы хотите, и избавит вас от неприятностей.


Чтобы углубиться в глубь; body-parser дает вам промежуточное программное обеспечение, которое использует nodejs/zlib, чтобы разархивировать входящие данные запроса, если он заархивирован и stream-utils/raw-body, чтобы дождаться полного, необработанного содержимого тела запроса до «разбора» (это означает, что если вы не собираетесь использовать запросите тело, вы просто потратили впустую какое-то время).

После того, как исходное содержимое, тело-анализатор будет анализировать его, используя один из четырех стратегий, в зависимости от конкретного промежуточного слоя вы решили использовать:

  • bodyParser.raw(): Есть ли на самом деле не разобрать тело, но просто выводит содержимое буферизированного содержимого до Buffer по адресу req.body.

  • bodyParser.text(): Читает буфер как обычный текст и предоставляет результирующую строку на req.body.

  • bodyParser.urlencoded(): Разбирает текст как URL-кодированных данных (который, как правило, браузеры для отправки данных формы из обычных форм, установленных для POST) и выставляет полученный объект (содержащий ключи и значения) на req.body. Для сравнения; в PHP все это автоматически выполняется и отображается в $_POST.

  • bodyParser.json(): Разбирает текст как JSON и выдает результирующий объект на req.body.

Только после установки req.body к желаемому содержанию он будет вызывать следующие промежуточный программное обеспечение в стеке, которое затем может получить доступ к данным запроса без необходимости думать о том, как распаковать и разобрать его.

Вы можете обратиться к тела-парсераgithub читать их документацию, она содержит информацию, касающуюся его работы.

0

Да, мы можем работать без body-parser. Когда вы это сделаете, вы получите необработанный запрос, а ваше тело и заголовки не находятся в корневом объекте. Вам придется индивидуально манипулировать всеми полями.

Или вы можете использовать body-parser, так как экспресс-команда его поддерживает.

Какой орган-парсер может сделать для вас: он упрощает запрос.
Как использовать: Вот пример:

Установите npm install body-parser --save

Это, как использовать тело-парсер экспресс:

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 })); 

Link.

https://github.com/expressjs/body-parser