Express主体解析器req.body与formdata是空对象 [英] Express body-parser req.body with formdata is empty object

查看:436
本文介绍了Express主体解析器req.body与formdata是空对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

某种程度上,我的要求始终是空的,也许您有一个主意:

Somehow my req.body is always empty, maybe you have an idea:

这是我的服务器代码:

const Express = require('express');
const bodyParser = require('body-parser');

const app = new Express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.post('/save', (req, res) => {
  console.log(req.body)  // => {}
  res.send(req.body);
});

const env = process.env.NODE_ENV || 'production';
app.listen(3000, err => {
   if (err) { return console.error(err); }
   console.info(`Server running on http://localhost:${port} [${env}]`);
});

当我尝试使用javascript发送formdata时,req.body为空:

When I try to send formdata with javascript the req.body is empty:

const data = new FormData(document.querySelector('form'));
console.log(data);  // seems empty already??? FormData{}??
const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:3000/save');
xhr.send(data);

与邮递员相同:

我不明白这一点……

用邮递员或raw (application/json)发送x-www-form-urlencoded在邮递员中有效.但是在javascript中使用Formdata发送相同的标头仍然会导致对象为空……

Sending x-www-form-urlencoded with postman or raw (application/json) works in postman. But sending the same headers with Formdata in javascript will still result in an empty object…

推荐答案

记录formData中的每个字段

To log every field in formData

let myForm = document.getElementById('myForm');
formData = new FormData(myForm);

for (let [key, value] of formData.entries()) { 
  console.log(key, value);
}

小提琴- https://jsfiddle.net/thesumit67/j4znhxa5/1/

要通过快递处理它,请使用 multer . 这是一个例子- https://www.npmjs.com/package/multer

To handle it via express use multer. Here is an example - https://www.npmjs.com/package/multer

确保在表单元素上添加enctype="multipart/form-data".否则Multer会忽略它.

Make sure to add enctype="multipart/form-data" on form element. Otherwise Multer will ignore it.

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

app.post('/save', upload.fields([]), (req, res) => {
  console.log( req.body );
  console.log( req.files );
  res.sendStatus(200);
});

这篇关于Express主体解析器req.body与formdata是空对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆