FormData发布到Express 4.0 - 正文解析器无法正常工作

时间:2014-08-29 09:55:49

标签: javascript node.js post express

所以我在前端有一个简单的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');
});

当我运行它时,控制台会记录一个空对象{}

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

<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' }

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

您可以按multer解析FormData。 或者如果您不发送任何二进制文件,则以字符串形式(json或查询字符串)而不是FormData发送。

以下代码发送json字符串,服务器可以解析数据。

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));