我有一个表单,它使用fetch()与NodeJS上的路由进行AJAX。当AJAX POST命中路径时,req.body显示一个空对象{}。
以下是代码:
//在app.js
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
//在form.js
中form.getElementById('form__option').addEventListener('submit', e => {
e.preventDefault()
const form = $('form')[0]
fetch('/polls/create', {
method: 'POST',
body: new FormData(form)
})
})
//在appRoute.js
中exports.createPost = (req, res, next) => {
console.log('req body', req.body)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
答案 0 :(得分:3)
此处的问题是,FormData
会将内容类型设置为multipart/form-data
,而Express {' body-parser
无法理解。
请注意评论here:
[body-parser]由于其复杂且通常较大的性质而无法处理多部分主体。对于多部分机构,您可能对以下模块感兴趣:busboy和connect-busboy;多方和连接多方;强大; multer。
换句话说,您必须使用不同的模块来处理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');
}
}