API 在 ReactJS 中调用获取 CORS 错误但在节点和邮递员中获取响应

API call getting CORS error in ReactJS but getting response in node and postman

我正在尝试调用 APIs 到安装在我本地服务器中的流行服务器,如 OwnCloud、Openfire 和 Ejabberd。我正在创建一个 ReactJS 网站。最初,我使用 fetch() 方法访问 API。但结果是 CORS 错误。

Access to fetch at 'http://x.x.x.x:8088/api/contacts/3000@x.x.x.x' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field cache-control is not allowed by Access-Control-Allow-Headers in preflight response.

我使用 Postman 检查了相同的 API 并成功获得了响应。然后我使用命令行使用下面的节点代码对其进行了测试,并在命令行中获得了 API 响应。

var http = require("http");

var options = {
  "method": "GET",
  "hostname": "x.x.x.x",
  "port": "8088",
  "path": "/api/contacts/3000@x.x.x.x",
  "headers": {
    "cache-control": "no-cache",
    "postman-token": "e5a6f2bb-abc9-8ce7-f237-342ab53ab9d6"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

我在我的 ReactJS 代码中实现了相同的节点代码,但再次出现相同的 CORS 错误。

我已将以下 header 添加到 fetch() 方法的 header 并得到相同的 CORS 错误。

'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
'Access-Control-Allow-Headers': 'origin, content-type, accept, authorization',

我在 fetch() 方法中添加了 mode: "cors"。但还是一样的错误。

能否请您提供一个解决方案来避免这个 *CORS* 问题?

您必须为 API 调用创建一个本地代理。

在这里,proxy 使用 url 模式匹配 api 调用并将它们重定向到相应的服务器。

尝试以下方法:

  • 安装 http-proxy-middleware

    npm install http-proxy-middleware --save
    
  • 创建src/setupProxy.js

    const proxy = require('http-proxy-middleware');
    
    module.exports = function(app) {
    
       app.use(proxy('/api', { target: 'http://localhost:8088/' }));
    
    };
    
  • 然后运行你的本地开发服务器