在Express JS路由中,使用formData获取POST是空的

时间:2017-01-21 00:10:13

标签: node.js fetch form-data

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

1 个答案:

答案 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');
    }
}