FormData发布到Express 4.0 – 正文parsing器不工作

所以我在前端有一个简单的Javascript:

var xhr = new XMLHttpRequest(); var data = new FormData(); data.append('param1', 'value1'); data.append('param2', 'value2'); xhr.open('POST', '/query'); xhr.onload = function(data){ console.log('loaded', this.responseText); }; xhr.send(data); 

在节点一侧:

 var express = require('express'); var app = express(); app.use( bodyParser.json() ); app.use( bodyParser.urlencoded() ); app.post('/query', function(req, res){ console.log(req.body); res.send('ok'); }); 

当我运行它,控制台logging一个空的对象{}

如果我尝试使用适当的forms,如:

 <form method="POST" action="/query"> <input type="text" name="param1" value="value1"> <input type="text" name="param2" value="value2"> <button type="submit">Submit</button> </form> 

一切如预期和控制台日志:

 { param1: 'value1', param2: 'value2' } 

我究竟做错了什么?

因为FormData对象总是作为XHR的multipart / formdata发送的。 https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send

你可以通过multerparsingFormData。 或者,如果不发送任何二进制文件,则以stringforms(json或查询string)而不是FormData发送。

下面的代码发送jsonstring,服务器可以parsing数据。

 var xhr = new XMLHttpRequest(); var data = { param1: 'value1', param2: 'value2' }; xhr.open('POST', '/query'); xhr.onload = function(data) { console.log('loaded', this.responseText); }; xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(data));