我有一个使用fetch()到AJAX的表单,在NodeJS上有一个路由。当 AJAX POST 命中路由时,req.body 显示一个空对象 {}。
代码如下:
在应用程序中.js
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
形式上.js
form.getElementById('form__option').addEventListener('submit', e => {
e.preventDefault()
const form = $('form')[0]
fetch('/polls/create', {
method: 'POST',
body: new FormData(form)
})
})
在应用路由中.js
exports.createPost = (req, res, next) => {
console.log('req body', req.body)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
这里的问题是FormData
会将内容类型设置为multipart/form-data
,这是Express body-parser
无法理解的。
请注意此处的评论:
[body-parser] 不处理多部分主体,因为它们很复杂且通常很大。对于多部分主体,您可能对以下模块感兴趣:busboy 和 connect-busboy;多方和连接多方;强大;喃喃自语。
因此,换句话说,您必须使用不同的模块来处理 FormData 发送的多部分正文。我可以推荐formidable
,在这种情况下,您的服务器代码将如下所示:
const formidable = require('formidable')
exports.createPost = (req, res, next) => {
var form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
console.log(fields)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
}