不知怎的,我的身体总是空的,也许你有一个想法:
下面是我的服务器代码:
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);
Postman 也一样:
我不明白...
使用postman发送x-www-form-urlencoded
或在postman中发送raw (application/json)
。但是在JavaScript中使用Formdata发送相同的头仍然会导致一个空对象...
6条答案
按热度按时间7vhp5slm1#
记录formData中的每个字段
小提琴-https://jsfiddle.net/thesumit67/j4znhxa5/1/
要通过express处理它,请使用multer。下面是一个例子-https://www.npmjs.com/package/multer
确保在表单元素上添加
enctype="multipart/form-data"
。否则穆特会忽略它。osh3o9ms2#
body-parser已被弃用,不再是Express的一部分。
此外,body-parser不提供解析form-data post数据的功能。
从body-parser存储库description:
由于多部分实体复杂且通常较大,因此无法处理多部分实体。对于多部分实体,您可能会对以下模块感兴趣:
dy2hfwbg3#
据我所知,问题可能出在HTML表单上。
然后在服务器代码中,它可能看起来像这样。
同样,这篇文章是旧的,所以你可能已经修复了它。
q8l4jmvw4#
我遇到了同样的问题,我使用了fetch API,将表单数据发送到node.js/express后端。问题是我在表单上设置了
enctype='multipart/form-data'
,并且我还在fetch Headers中设置了Content-type: multipart/form-data
。从Header中删除Content-type
使一切正常工作。我从这里得到了解决方案=> https://github.com/expressjs/multer/issues/4116jjcrrmo5#
使用multer,但我想提一下,强大也可以用于此。理想情况下,这应该是一个快速的中间件。
k5hmc34c6#
Express和body解析器版本:
app.js:
要发送原始数据,请从列表
中选择JSON