我正在尝试使用POST
API将fetch
数据发送到我的服务器,并且每次操作时我都会使用空体。
据我所知fetch
documentation,要发布数据,你需要传递方法键设置为“POST”的对象和带有字符串或FormData
对象的正文键(或其他一些)。
这是一个简单的例子,它没有像我期望的那样工作:
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);
});
我还有一个快速服务器,它记录请求正文并在响应中回显它。
app.post("/fetch", function(req, res) {
// Logs empty object :(
console.log(req.body);
res.send(JSON.stringify(req.body));
});
我将formData
添加为fetch
请求的正文,但似乎没有任何内容。
答案 0 :(得分:2)
这是因为您的节点服务器无法正确理解多个部分表单(这是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
使用它,但我不知道自己是怎么做的。