javascript - 我如何阻止 req.body 为空。node.js 快递
问题描述
我有一个简单的快速应用程序,它获取一个获取请求,获取看起来像这样:
let opts = {
method: "POST",
headers: {
"Content-Type": "application/json",
},
mode: "no-cors",
body: {
"test": "test"
}
}
fetch("http://localhost:3001/data", opts)
它在 setup() 函数中。
服务器端代码如下所示:
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
mode: "no-cors",
是一个声明,你不会做任何需要 CORS 许可的事情,并且应该禁止任何与 CORS 相关的错误。
您需要CORS 的许可才能设置application/json
内容类型标头。
所以第一项工作是删除那条线。
问题二:CORS
然后您需要更改服务器,以便它授予您发出请求的权限。
确保启用对预检请求的支持,因为设置application/json
内容类型标头需要预检。
问题三:JSON
您声称您正在发送 JSON,但您正在传递fetch
一个普通对象。
当您这样做时,fetch
将使用内置toString
方法将其转换为字符串。这为您提供了"[object Object]"
不是 JSON 且不包含您的数据的内容。
您需要改为传递 JSON。
body: JSON.stringify({
"test": "test"
})
推荐阅读
- python - 简单的for循环将系列合并到数据帧上的内存错误
- python - 熊猫 - 日期分组内的分箱
- java - NetBeans 8.2 看不到创建 Java 应用程序的选项
- webpack - webpack 仅编译,没有构建输出以检查退出代码
- reactjs - 更改使用 chrome 扩展做出反应的输入值
- c# - 具有统一 BorderThickness 的边框无法绑定 BorderBrush 颜色
- css - 为什么在使用响应式桌面、移动设备或平板电脑时,在 hr 上使用 margin left = 47% 会有不同的作用?
- javascript - 下载网站清单需要执行哪些必要步骤?
- google-chrome - 屏幕阅读器无法读出移动浏览器上的复选框标签
- go - 在 golang 中更新 grpc 的接收和发送消息大小