我有简单的服务器:
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"})
});
这是可行的,但请求正文是{}-为什么?有任何建议。
fetch
的配置错误。
请求标头进入headers
属性。
由于您将Content-Type
放在错误的位置,因此您正在发送带有Content-Type: text/plain
的请求(字符串主体的默认设置),因此JSON主体解析器将忽略它(并且您没有设置原始主体解析器)。
(此外,Allow-Control-Allow-Origin
以Access
开头,是response头,在请求中没有位置。
fetch('http://localhost:8080/', {
"method": "post",
"mode": "cors",
headers: {
"Content-Type": "application/json",
},
"body": JSON.stringify({"1":"sss"})
});
修复该问题后,对于正确的CORS配置,您会收到预期的错误消息。您仅将端点设置为处理简单请求,但是JSON格式的请求已预检。 Express cors
的explains how to configure it for preflighted requests模块的文档。