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

我有一个窗体,使用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会将内容types设置为multipart/form-data ,这是Express的body-parser不理解的。

注意这里的评论:

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