微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何阻止 req.body 为空 node.js 快递

如何解决我如何阻止 req.body 为空 node.js 快递

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

for (int i = 0; i < N; i++)
{
    if (scanf("%d",&v[i]) != 1)
    {
        fputs("read error\n",stderr);
        return 1;
    }
}

它在 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);
});

帖子的正文不是未定义的,但它是空的,我无法弄清楚我的生活有什么问题

解决方法

问题一:no-cors

mode: "no-cors", 声明您不会做任何需要 CORS 许可的事情,并且应该禁止任何与 CORS 相关的错误。

需要来自 CORS 的许可才能设置 application/json 内容类型标头。

所以第一个工作是删除那条线


问题二:CORS

然后您需要更改服务器,以便它授予您发出请求的权限。

安装 the cors middleware package 并按照那里的设置说明进行操作。

确保您enable support for preflight requests,因为设置 application/json 内容类型标头需要预检。


问题三:JSON

您声称您正在发送 JSON,但您传递的是 fetch 一个普通对象。

当您这样做时,fetch 将使用内置的 toString 方法将其转换为字符串。这为您提供了 "[object Object]",它不是 JSON 并且不包含您的数据。

您需要改为传递 JSON。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。