我正在使用以下内容从 React 应用程序发布到我的 Express 服务器:
const response = await fetch('http://localhost:3100/api', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-type': 'application/json'
},
// body: { "user":"1", "cmd":"Send NFT"},
body: JSON.stringify({ user: 1, cmd:"Send NFT"}),
})
我尝试使用其中一种正文格式
在 Nodejs 方面,版本为 4.21.1 Express:
const express = require('express');
const app = express();
const port = 3100;
app.use(express.json());
app.get('/', (req, res) => {
res.send('Hello World!');
})
app.post('/api', (request, response) => {
console.log("User: " + JSON.stringify(request.body) );
if (request.body.user == 1) response.send(JSON.stringify({ user: 1, cmd: request.body.cmd}));
else if (request.body.user == 2) response.send(JSON.stringify({user: 2, cmd: "Info from 1"}));
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
我收到“用户:{}”
我认为这是 CORB 保护的结果,但据我所知,帮助正确避免不需要的过滤的主要方法是正确标记内容类型,在这种情况下,
headers: {'Content-type':'application/json'}
即使传输是从本地主机到本地主机,我也必须将获取标记为“模式:no-cors”。
抱歉,我正在回答我自己的问题。我找到了一个解决方案,这是我之前在与此问题相关的任何帖子中都没有见过的解决方案,也许是因为它是在 Express 版本 4.21.1 上:
只需更改以下内容:
const express = require('express');
const app = express();
const port = 3100;
app.use(express.json());
对此:
const express = require('express');
const app = express();
var cors = require('cors')
const port = 3100;
app.use(cors())
app.use(express.json());
您必须加载cors包
npm install cors
并看到:
https://github.com/expressjs/cors?tab=readme-ov-file#enabling-cors-pre-flight
了解更多信息。
这样我就可以从原始获取中删除
mode: no-cors
行。