Javascript 如何阻止req.body为空。node.js express

Javascript 如何阻止req.body为空。node.js express,javascript,node.js,express,cmd,localhost,Javascript,Node.js,Express,Cmd,Localhost,我有一个简单的express应用程序,可以获取一个获取请求,即获取 看起来像这样: let opts = { method: "POST", headers: { "Content-Type": "application/json", }, mode: "no-cors", body: { "test": "test" } } fetc

我有一个简单的express应用程序,可以获取一个获取请求,即获取 看起来像这样:

let opts = {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  mode: "no-cors",
  body: {
    "test": "test"
  }
}

fetch("http://localhost:3001/data", opts)
const express = require('express');
const app = express();
app.listen(3001, () => console.log("listening at 3001"));
app.use(express.static("public"));
app.use(express.json());

app.post("/data", (req, res) => {
  console.log("post recived");
  console.log(req.body);
});
它位于setup()函数中

服务器端代码如下所示:

let opts = {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  mode: "no-cors",
  body: {
    "test": "test"
  }
}

fetch("http://localhost:3001/data", opts)
const express = require('express');
const app = express();
app.listen(3001, () => console.log("listening at 3001"));
app.use(express.static("public"));
app.use(express.json());

app.post("/data", (req, res) => {
  console.log("post recived");
  console.log(req.body);
});
在我的控制台中,刷新所有内容后得到的结果如下:

listening at 3001
post recived
{}
帖子的正文不是未定义的,但它是空的,我不知道我一生中的问题是什么

问题一:没有cors
模式:“无cors”,
是一种声明,表示您不打算做任何需要cors许可的事情,任何与cors相关的错误都应该被抑制

您需要获得CORS的许可才能设置
应用程序/json
内容类型标题

因此,第一项工作是删除该行


问题二:CORS 然后,您需要更改服务器,以便它授予您发出请求的权限

安装并按照此处的安装说明进行操作

因为设置
application/json
content-type头需要一个预飞行,所以请确保您的操作是正确的


问题三:JSON 您声称正在发送JSON,但正在传递一个普通对象

执行此操作时,
fetch
将使用内置的
toString
方法将其转换为字符串。这将为您提供
“[object object]”
,它不是JSON,也不包含您的数据

您需要传递JSON

body: JSON.stringify({
   "test": "test"
})

可运行代码段用于可在浏览器内执行的代码段。请使用三个勾号(````)将代码格式化。下次您需要将正文设置为字符串并设置正确的标题时,请参阅我应该放置什么来代替“/products/:id”?您要为其启用CORS的路径