bre*_*son 5 form-data fetch node.js
我有一个表单,它使用 fetch() 到 AJAX 以及 NodeJS 上的路由。当 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');
}
这里的问题是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');
    }
}
| 归档时间: | 
 | 
| 查看次数: | 2584 次 | 
| 最近记录: |