我有一个表单,它使用 fetch() 到 AJAX,并在 NodeJS 上有一个路由。当 AJAX POST 命中路由时,req.body 显示一个空对象 {}。
这是代码:
// 在 app.js 中
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ 扩展: 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');
}
这里的问题是FormData
将设置内容类型为multipart/form-data
,哪个表达'body-parser
不明白。
注意评论here https://www.npmjs.com/package/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');
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)