Не работает body parser

Почему не удается вызвать body-parser node.js, несмотря на то, что я его установил?

Я начинаю изучать node.js и пытаюсь понять, как получить содержимое POST-запроса. Я пытаюсь следовать инструкциям в этом сообщении. До сих пор я успешно установил node.js (в Windows 7) и Express и смог заставить работать свой самый первый скрипт. Однако моя проблема возникает, когда я пытаюсь использовать парсер тела. Я установил его, и похоже, что он есть

Вот код скрипта node.js

Тем не менее, когда я его запускаю, node.js выдает ошибку, говоря, что «не удается найти модуль синтаксического анализа тела». Что я сделал не так?

Согласно предложениям @Kale и других, я попытался установить body-parser локально, но это, похоже, не помогает, так как теперь мой скрипт выдает следующее сообщение:

Я пробовал установить «json» локально и глобально — установка вроде работает, но это не влияет на ошибку файла.

4 ответа

Я думаю, что делал что-то в корне неправильно — я вернулся к основам и начал все сначала, на этот раз убедившись, что у меня есть файл package.json. Теперь это работает.

А вот и package.json

Я получал ту же ошибку, когда после установки экспресс я получаю такие ошибки, как

Cannot find module ‘body-parser’ после установки это ошибка

Cannot find module ‘merge-descriptors’ и так далее для

Все эти модули являются зависимостями для express. Если вы выполните «npm install» или «npm install -g» без какого-либо модуля, он установит все недостающие зависимости.

Чтобы исправить это, я сначала удаляю экспресс, затем устанавливаю его и сразу после этого выполняю «npm install». Это исправило все ошибки.

Этот ответ намного проще. Перейдите в базовый каталог и сделайте ссылку на необходимые глобальные модули.

Нет необходимости устанавливать модули повсюду. Если модуль не установлен глобально, указанная выше команда установит модуль глобально, а затем создаст ссылку на него локально.

Как заявил Кевин Б., вы должны установить body-parser локально и сохранить его в манифесте:

Источник

Express.js req.body undefined

У меня это как конфигурация моего сервера Express

Но все же, когда я спрашиваю req.body.something в своих маршрутах, я получаю ошибку, указывающую на это body is undefined . Вот пример маршрута, который использует req.body :

Я читал, что эта проблема вызвана отсутствием, app.use(express.bodyParser()); но, как вы можете видеть, я называю это перед маршрутами.

Вы должны убедиться, что вы определяете все конфигурации ДО определения маршрутов. Если вы это сделаете, вы можете продолжать использовать express.bodyParser() .

Последние версии Express (4.x) отделили промежуточное программное обеспечение от базовой платформы. Если вам нужен парсер тела, вам нужно установить его отдельно

а затем сделайте это в своем коде

Вы должны использовать app.use(express.bodyParser()) раньше app.use(app.router) . На самом деле, app.use(app.router) должно быть последнее, что вы называете.

Сначала убедитесь, что вы установили модуль npm с именем body-parser, вызвав:

Затем убедитесь, что вы включили следующие строки перед вызовом маршрутов

Express 4, имеет встроенный парсер тела. Не нужно устанавливать отдельный body-parser. Так что ниже будет работать:

Content-Type в заголовке запроса действительно важен, особенно когда вы публикуете данные из curl или любых других инструментов.

Убедитесь, что вы используете что-то вроде application / x-www-form-urlencoded, application / json или других, это зависит от ваших почтовых данных. Оставьте это поле пустым, чтобы запутать Express.

Как уже написано под одним комментарием, я решил это с помощью

Я до сих пор не знаю, почему простое express.bodyParser() не работает .

Добавьте в свой app.js

до вызова роутера

Похоже, что парсер тела больше не поставляется с экспресс. Возможно, нам придется установить его отдельно.

Обратитесь к странице git https://github.com/expressjs/body-parser для получения дополнительной информации и примеров.

На случай, если кто-нибудь столкнется с той же проблемой, что и я; Я использую префикс URL, как

который был настроен с маршрутизатором

и тогда у меня было следующее

Что решило мою проблему, поместив конфигурацию bodyparser выше app.use(‘/api’, router);

express.bodyParser () нужно сообщить, какой тип контента он анализирует. Поэтому вам необходимо убедиться, что при выполнении запроса POST вы включаете заголовок «Content-Type». В противном случае bodyParser может не знать, что делать с телом вашего запроса POST.

Если вы используете curl для выполнения запроса POST, содержащего некоторый объект JSON в теле, это будет выглядеть примерно так:

Если вы используете другой метод, просто установите это поле заголовка, используя любое соглашение.

Источник

Что делает body-parser с express?

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

Для обработки 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. для более подробной информации см. это

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

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

Что может сделать для вас body-parser: Это упрощает запрос.
Как использовать это: Вот пример:

устанавливать npm install body-parser —save

Вот как использовать body-parser в экспрессе:

И тогда вы можете получить тело и заголовки в корневом объекте запроса. пример

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

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

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

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

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

bodyParser.text () : читает буфер как обычный текст и отображает полученную строку в req.body.

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

bodyParser.json () : анализирует текст как JSON и отображает полученный объект req.body .

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

Вы можете обратиться к 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 облегчает получение информации, содержащейся в клиентских запросах, в различных форматах, вместо того, чтобы захватывать потоки необработанных данных и выяснять, в каком формате находится эта информация, а тем более вручную анализировать эту информацию в полезные данные.

Понимание тела запросов

При получении запроса POST или PUT тело запроса может иметь важное значение для вашего приложения. Получение данных тела немного сложнее, чем доступ к заголовкам запросов. Объект запроса, который передается обработчику, реализует интерфейс ReadableStream. Этот поток можно прослушивать или передавать в другом месте, как и любой другой поток. Мы можем получить данные прямо из потока, прослушивая события «data» и «end» потока.

Кусок, генерируемый в каждом событии «data», является буфером. Если вы знаете, что это будут строковые данные, то лучше всего собрать данные в массив, а затем в конце «конкатенировать» и структурировать.

Понимание body-parser

Согласно его документации

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

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

Он предоставляет четыре модуля для анализа различных типов данных.

После того, как основной анализатор исходного содержимого будет использовать одну из вышеуказанных стратегий (в зависимости от промежуточного программного обеспечения, которое вы решили использовать) для анализа данных. Вы можете прочитать о них больше, прочитав их документацию.

Источник

Что делает тело-парсер с выражением?

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

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

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

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

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

редактировать в 2019-april-2: в express@4.16.0 промежуточное программное обеспечение анализатора тела в комплекте с express. для более подробной информации см. это

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

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

Что может сделать для вас body-parser: Это упрощает запрос.
Как использовать это: Вот пример:

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

Вот как использовать body-parser в экспрессе:

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

Короче; 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, чтобы прочитать их документацию, в нем содержится информация о его работе.

Давайте попробуем сохранить это наименее техническое.

Допустим, вы отправляете данные формы html на сервер node-js, т.е. Вы сделали запрос на сервер. Файл сервера получит ваш запрос под объектом запроса. Теперь по логике, если вы консолируете этот объект запроса в своем файле сервера, вы должны увидеть данные своей формы где-то в нем, которое можно было бы извлечь тогда, но whoa! вы на самом деле не!

Итак, где наши данные? Как мы его извлечем, если это не только в моей просьбе.

Простое объяснение этому – http отправляет ваши данные формы в биты и куски, которые предназначены для сборки по мере их достижения. Итак, как бы вы извлекли свои данные.

Но почему бы не причинить этой боли каждый раз ручную разборку ваших данных за куски и сборку. Используйте что-то, называемое “body-parser”, которое сделает это за вас.

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

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

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

Таким образом, body-parser проанализировал ваш входящий запрос, собрал куски, содержащие ваши данные формы, а затем создал этот объект тела для вас и заполнил его данными формы.

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

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

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

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

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

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

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

В принципе, если вопрос: “Нужно ли использовать body-parser ?” Ответ – нет’. Мы можем придумать ту же самую информацию из клиент-пост-запроса, используя более крутой маршрут, который обычно будет менее гибким и увеличит количество кода, который мы должны написать, чтобы получить ту же информацию.

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

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

позвольте мне пояснить, почему мы используем парсер для тела?

Разбирайте входящие запросы в промежуточном программном обеспечении перед вашими обработчиками, доступными под свойством req.body.

Примечание. Поскольку форма req.body основана на управляемом пользователем входе, все свойства и значения в этом объекте недоверены и должны быть проверены перед доверием. Например, req.body.foo.toString() может терпеть неудачу несколькими способами, например, свойство foo может быть не там или не может быть строкой, а toString может не быть функцией, а вместо этого строкой или другим пользователем.

Установка (локализация в папку проекта)

npm install body-parser OR npm я body-parser

Источник

Читайте также:  Как настроить магнитолу сони под сабвуфер активный
Оцените статью