2016-04-28 49 views
3

我正在尝试使用fetch API向我的服务器提供POST数据,每次我最终都会得到一个空体。无法使用JavaScript获取API POST数据

据我所知,从fetch documentation可以知道,要发布数据,您需要传递一个方法键设置为“POST”的对象,并使用字符串或对象(或其他)传递主体键。

这里的,这只是没有工作,我期望一个简单的例子:

var formData = new FormData(); 
formData.append("test", "woohoo"); 
formData.append("foo", "bar") 
// prints out contents of formData to show that it has contents! 
formData.forEach(function(key, value) { 
    console.log(`${key}: ${value}`); 
}); 

fetch("/fetch", { 
    method: "POST", 
    body: formData 
}).then(function(response) { 
    return response.json(); 
}).then(function(json) { 
    // Logs empty object 
    console.log(json); 
}).catch(function(err) { 
    console.log(err); 
}); 

我也有这个,它记录请求主体和呼应它在响应中回一个Express服务器。

app.post("/fetch", function(req, res) { 
    // Logs empty object :(
    console.log(req.body); 
    res.send(JSON.stringify(req.body)); 
}); 

我添加formDatafetch请求的主体,但从来都没有,似乎经历。

Please find my test files in this gist here和帮助!

+0

我相信你错过了'扔新TennisBall()',这是你所需要的抓取。 :) – markthethomas

回答

2

这是因为您的节点服务器不能正确理解mulitpart表单(这是FormData)会默认发送。

您可以在您的服务器上使用node-muliparty,无需触摸前端代码即可轻松读取表单。

喜欢的东西:

var multiparty = require('multiparty'); 
var app = express(); 

app.post("/fetch", function(req, res) { 
    var form = new multiparty.Form(); 

    form.parse(req, function(err, fields, files) { 
    console.log(fields); 
    res.send(JSON.stringify(fields)); 
    }); 
}); 

index.js会告诉你它正常工作。可能有一种方法可以使body-parser与此工作,但我不知道自己是如何。