Express body-parser req.body with formdata 是空对象

新手上路,请多包涵

不知何故我的 req.body 总是空的,也许你有一个想法:

这是我的服务器代码:

 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 发送表单数据时,req.body 为空:

 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);

与邮递员相同:

邮差

我不明白这个…

发送 x-www-form-urlencoded 邮递员或 raw (application/json) 在邮递员中工作。但是在 javascript 中使用 Formdata 发送相同的标题仍然会导致一个空对象……

原文由 chitzui 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 675
2 个回答

记录 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

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

 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);
});

原文由 Sumit M 发布,翻译遵循 CC BY-SA 3.0 许可协议

body-parser 已弃用,不再是 Express 的一部分。

此外,正文解析器不提供解析表单数据发布数据的功能。

来自 body-parser 存储库 描述

这不处理多部分主体,因为它们复杂且通常很大。对于多部分主体,您可能对以下模块感兴趣:

原文由 Akim Kelar 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题