无法使用JavaScript fetch API发布数据

时间:2016-04-28 14:53:00

标签: javascript frontend fetch

我正在尝试使用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请求的正文,但似乎没有任何内容。

Please find my test files in this gist here并提供帮助!

1 个答案:

答案 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使用它,但我不知道自己是怎么做的。