为什么 form-data 不在 req.body 中?

Why is form-data not in req.body?

我有一个使用 REACT 和 form-data 的项目,并且 form-data 是从 REACT 客户端中设置的,并使用 req.body 在 API 中没有问题。但是,当我使用 Postman 时,req.body 是空的 - 为什么 form-data req.body 是空的?

邮递员form-data

我试图通过邮递员发送的 form-data 信息是一个名为“文件夹”的变量和一个名为“One.png”的文件。

这是我发送前的样子:

反应 API - 1

这是基本的 API 调用:

router.post('/:userId/images', passport.authenticate('jwt', { session: false }), async (req, res) => {
  var userId = req.params.userId;
});

req.body 在 REACT API

中为空

当我设置断点然后进行 Postman 调用时,req.body 为空:

反应 API - 2

这是相同的 API 调用,但现在使用 req.on(...) 函数...

router.post('/:userId/images', passport.authenticate('jwt', { session: false }), async (req, res) => {
  var userId = req.params.userId;

  req.on('data', async (data) => {
    console.log('DATA', data.toString());

    return res.status(200).json('ok');
   }
});

req.on(...) 有数据 ?

req.on(...) 函数,form-data 存在

我注意到其他几个帖子询问 Postman 是否确实在发送数据并提供快照

请求headers

请求数据

如何使用 req.body 获取表单数据?

尝试 1

我将 Multer 添加到我的项目中,希望它能解决问题。

const multer = require('multer');
const upload = multer();

...

router.post('/:userId/images', passport.authenticate('jwt', { session: false }), upload.array('imageArray'), async (req, res) => {

现在我在 req.body 中得到了 'variables',但仍然没有 imageArray 并且 req.on(...) 从未被命中

正在为项目添加多重依赖

  "dependencies": {
    "multer": "^1.4.2",
  },

将其带入项目

const multer = require('multer');
const upload = multer();

更改 API 以使用 multer 'upload'

router.post('/:userId/images', passport.authenticate('jwt', { session: false }), upload.array('imageArray'), async (req, res) => {

最后,按照 Patrick Roberts 的建议检查正确的值:

  console.log('req.body', JSON.stringify(req.body));
  console.log('req.files', JSON.stringify(req.files));

输出:

req.body {"variables":"{folder:\"test\"}"}
routes/api/user/users.js:665
req.files [{"fieldname":"imageArray","originalname":