Почему тело запроса равно нулю при загрузке файла с помощью postman in Node.js

#node.js #http #postman #multer #body-parser

#node.js #http #postman #мультер #body-синтаксический анализатор

Вопрос:

Я пытаюсь загрузить файл из postman в Node.js сервер. Я использую multer и body-parse для разбора тела запроса.

Пример использования:

  1. когда я использую POST-запрос с raw-JSON в качестве тела в Postman, все работает нормально, и я могу видеть req.body точно так, как указано в Postman, а также я могу назначить новую пару ключ-значение req.body, чтобы эти новые переменные можно было использовать в дальнейших промежуточных программах на маршруте.
  2. Но когда я пытаюсь загрузить файл из postman с form-data в качестве Body в Postman, тогда я все равно могу получить значение из req.body, как указано. Но после многократного среднего уровня новые присвоенные значения req.body (из промежуточного программного обеспечения) отображаются поврежденными, например, req.body становится [Object: нулевой прототип]. Я могу подтвердить, что Multer работает нормально, но Multer искажает данные req.body (которые создаются в самом промежуточном программном обеспечении маршрута)

Пожалуйста, помогите определить значение req.body=[Объект: нулевой прототип]

Комментарии:

1. Опубликуйте некоторый код вашего мультера и укажите, где вы получаете ошибку. Кроме того, убедитесь, что заголовки не отправляются, например, флажок Content-type снят. Знайте, что это body-parser не анализирует req.body , потому что вы отправляете все свои данные как дескрипторы multipart/form-data which multer .

2. Работает ли это, когда вы отправляете форму загрузки файла на веб-странице? Можете ли вы приложить какой-нибудь скриншот настройки postman?

Ответ №1:

Я столкнулся с аналогичной проблемой. Если вы используете console.log(req.body) в функции. вы заметите, что тело равно [Object: нулевой прототип], потому что Multer обрабатывает запрос, поскольку форма состоит из нескольких частей. Итак, если вы используете объект console.log (req), вы можете найти значения, которые можно извлечь, и вы можете просто выполнить запрос.{Name_of_field} для получения значений.

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

Ответ №2:

Шивам Махаджан написал почти так, как оно есть, но:

Вы можете получить доступ к текстовым полям не в req.{Name_of_field} , а req.body.{Name_of_field} , как указано в документах multer.

Ответ №3:

Вы можете использовать express-busboy . Добавьте это на свою главную страницу:

 const expressBusboy = require('express-busboy');
expressBusboy.extend(app);
  

и это проанализирует ваши данные формы.