在express上处理JSON post请求。遵循了所有建议,但请求正文为空

问题描述 投票:0回答:1

我正在使用以下内容从 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 post body-parser
1个回答
0
投票

抱歉,我正在回答我自己的问题。我找到了一个解决方案,这是我之前在与此问题相关的任何帖子中都没有见过的解决方案,也许是因为它是在 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
行。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.