#node.js #http #postman #multer #body-parser
#node.js #http #postman #мультер #body-синтаксический анализатор
Вопрос:
Я пытаюсь загрузить файл из postman в Node.js сервер. Я использую multer и body-parse для разбора тела запроса.
Пример использования:
- когда я использую POST-запрос с raw-JSON в качестве тела в Postman, все работает нормально, и я могу видеть req.body точно так, как указано в Postman, а также я могу назначить новую пару ключ-значение req.body, чтобы эти новые переменные можно было использовать в дальнейших промежуточных программах на маршруте.
- Но когда я пытаюсь загрузить файл из 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
whichmulter
.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);
и это проанализирует ваши данные формы.