Ошибка чтения содержимого req.body при отправке application / x- www-form-urlencoded от почтальона - bodyparser уже используется - PullRequest
0 голосов
/ 25 мая 2020

Как сказано в названии. Я отправляю данные многостраничной формы от почтальона с несколькими текстовыми полями, а также изображением. Однако, когда я console.log (req.body), я получаю

{
  '------WebKitFormBoundaryCpNHg1P01X54QAVr\r\nContent-Disposition: form-data; name': '"customerID"\r\n' +
    '\r\n' +
    '1\r\n' +
    '------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
    'Content-Disposition: form-data; name="make"\r\n' +
    '\r\n' +
    'honda\r\n' +
    '------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
    'Content-Disposition: form-data; name="model"\r\n' +
    '\r\n' +
    'accord\r\n' +
    '------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
    'Content-Disposition: form-data; name="year"\r\n' +
    '\r\n' +
    '2020\r\n' +
    '------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
    'Content-Disposition: form-data; name="color"\r\n' +
    '\r\n' +
    'white\r\n' +
    '------WebKitFormBoundaryCpNHg1P01X54QAVr--\r\n'
}

Если я console.log (req.body.keyName), у меня всегда есть undefined. Я уже реализовал то, что предлагалось в похожих сообщениях, т.е. используя

app.use(bodyParser.urlencoded({
 extended: true
}));

, но это все еще не работает. Я не уверен, что делаю не так. Далее следуют фрагменты кода.

сервер. js

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
 extended: true
}));

app.use(cors());

app.use('/users', userRouter);
app.use('/offers', offerRouter);


app.listen(PORT, (err)=>
{
    if (err) console.log(err);
    else console.log(`Server listening on port ${PORT}`);
});

маршрут


const multer =  require('multer');

//required for mulitpart-formdata
const diskStorage = multer.diskStorage({
    destination: "uploads/",
    filename: (req, file, call_back) => {
      //Prepend date to the filename or anything that makes
      //the file unique so it won't be overwritten

      call_back(null, Date.now() + "_" + file.originalname);
    },
  });
const upload = multer({ storage: diskStorage });

router.post("/request", upload.single("file"), (req, res, next) =>
{
    GetBucket();
    console.log(req.file);
})


почтальон enter image description here

1 Ответ

0 голосов
/ 25 мая 2020

Чтобы разобрать составной запрос, вам понадобится Multer или BusyBoy. Я бы посоветовал Multer (https://www.npmjs.com/package/multer), так как он прост и удобен в использовании, вот пример использования Multer

const Multer = require('multer');
// create multer instance
const multer = Multer({
  storage: Multer.MemoryStorage, // we want to save parsed body in RAM
  onError: function(err, next) {
      console.log(err);
      next(err);
  }
});

function myController("/multipart/request", multer.single('name'), (req, res) => {
   console.log(req.body.name);
});

Примечание: используйте составной запрос, если вы отправляете файлы вместе с вашим запросом, иначе вы можете использовать application/x-www-form-urlencoded или application/json, которые могут быть проанализированы парсером тела

...