【问题标题】:how do i stop req.body from being empty. node.js express我如何阻止 req.body 为空。 node.js 快递
【发布时间】:2021-04-14 04:14:55
【问题描述】:

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

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
{}

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

【问题讨论】:

  • runnable sn-ps 用于可以在浏览器中执行的 sn-ps。请格式化您的代码,下次用三引号(```)包装它
  • 您需要将正文设为字符串并设置正确的标题,请参阅stackoverflow.com/q/29775797/3001761

标签: javascript node.js express cmd localhost


【解决方案1】:

问题一:不正确

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"
})

【讨论】:

  • 我应该用什么代替'/products/:id'?
  • 要启用 CORS 的路径
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多