所以我在前端有一个简单的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' }
我做错了什么?
答案 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));