为什么 req.body 返回一个空的 object?

why is req.body returning an empty object?

如标题所述,req.body 打印出一个空的 object 或 {}。我查看了其他一些帖子,发现这是一个常见问题,但我发现 none 已发布的解决方案解决了该问题。

客户端代码

 const myData = "hello world";
  const options = {
    method: "POST",
    header: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(myData),
  };
  fetch("http://localhost:8000/api", options);

服务器端node.js代码

app.use(express.json({ limit: "1000mb" }));
app.use(express.urlencoded({ limit: "1000mb", extended: true }));

app.listen(8000, function () {
  console.log("server is running");
});

app.use(express.static("public"));

app.post("/api", (req, res) => {
  console.log(req.body);
});

编辑:我相信 body-parser 已经成为 express 的一部分一段时间了,express 通过

实现了自己版本的 body 解析器
app.use(express.json({ limit: "1000mb" }));
app.use(express.urlencoded({ limit: "1000mb", extended: true }));

你有两个问题。

Headers

您的直接问题是打错了字。您需要传递给 fetch 的选项名称是 headers(复数)而不是 header.

由于您未能说明您正在发送 JSON,因此您完全绕过了 JSON 解析中间件。

现代JSON

当前的 JSON 规范允许 JSON 文本包含任何 JSON 数据类型。

原规范只允许顶层为object或数组。

您使用的中间件默认执行原始规范,因此尝试将字符串作为整个 JSON 文本发送将引发异常。

允许设置字符串 strict:

app.use(express.json({ limit: "1000mb", strict: false }));