为什么 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":
我有一个使用 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":