为什么是空对象,Express服务器,方法发布(2020)

问题描述 投票:-2回答:1

我有简单的服务器:

const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || "8080";

app.use(bodyParser.json());

app.listen(port, () => {
  console.log(`Listening to requests on http://localhost:${port}`);
});

app.post("/", (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.send(JSON.stringify(req.body));
  console.log("»>", req.body)
});

从本地主机发送请求:3000

fetch('http://localhost:8080/', {
  "method": "post",
  "Allow-Control-Allow-Origin": "*",
  "mode": "cors",
  "Content-Type": "application/json",
  "body": JSON.stringify({"1":"sss"})
});

这是可行的,但请求正文是{}-为什么?有任何建议。

node.js express post fetch
1个回答
0
投票

fetch的配置错误。

请求标头进入headers属性。

由于您将Content-Type放在错误的位置,因此您正在发送带有Content-Type: text/plain的请求(字符串主体的默认设置),因此JSON主体解析器将忽略它(并且您没有设置原始主体解析器)。

(此外,Allow-Control-Allow-OriginAccess开头,是response头,在请求中没有位置。

]
fetch('http://localhost:8080/', {
  "method": "post",
  "mode": "cors",
  headers: {
      "Content-Type": "application/json",
  },
  "body": JSON.stringify({"1":"sss"})
});

修复该问题后,对于正确的CORS配置,您会收到预期的错误消息。您仅将端点设置为处理简单请求,但是JSON格式的请求已预检。 Express corsexplains how to configure it for preflighted requests模块的文档。

© www.soinside.com 2019 - 2024. All rights reserved.