使用 formData 获取 POST 在 Express JS 路由中为空



我有一个使用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');
    }
}

最新更新