当前位置: 首页 > 面试题库 >

如何使用https://newsapi.org/克服CORS问题

邹胜泫
2023-03-14
问题内容

我正在尝试通过React应用程序中的Redux动作和reducers进行api调用。

但是,我的浏览器出现了这个CORS问题。

我想知道我是否可以从客户端解决此问题,因为我内部没有对API的任何访问权限。

谁能帮我解决这个问题?

这是newsActions.js的代码:

import * as types from './actionTypes';



const API_KEY = "<Redacted>";



export const getNewsApi = () => {

  debugger;

  return (dispatch, getState) => {

    dispatch({

      type: 'API_REQUEST',

      options: {

        method: 'GET',

        service: 'news',

        mode: 'cors',

        headers:{

            'Access-Control-Allow-Origin':'*'

        },

        endpoint: `https://newsapi.org/v2/top-headlines?country=us&category=business&apiKey=${API_KEY}`,

        actionTypes: {

          success: types.GET_NEWS_API_SUCCESS,

          error: types.GET_NEWS_API_ERROR

        }

      }

    });

  }

}

这是server.js的代码:

var express = require('express');

var app = express();



var cors = require('cors');



let __homeglobals = [];



app.use(cors());

app.set("jsonp callback", true);





var server = app.listen(8082, function () {

   var host = server.address().address;

   var port = server.address().port;



   console.log("Example app listening at http://%s:%s", host, port);

});

如果您需要其他信息或有疑问,请在下面对其进行评论。

谢谢。


问题答案:

您可以通过将源服务器(Web服务器)代理到API服务器来解决跨源问题。

更改客户端代码中的调用以将请求发送到/api/whatever(故意缺少方案,主机和端口,因此它使用为页面提供服务的那个)。从客户端的角度来看,这不再是对其他主机的请求。

我猜想在您分派的操作中,这对应于更改endpoint属性:

endpoint: `/api/top-headlines?country=us&category=business&apiKey=${API_KEY}`

然后在您的Web服务器中设置基于路径的代理,以匹配以开头的路由/api并将其代理到https://newsapi.org/v2。例如,使用http- proxy-middleware

var proxy = require('http-proxy-middleware');

app.use('/api', proxy({target: 'https://newsapi.org/v2'}));

请注意,“ Access-Control-Allow-Origin”标头是由服务器而不是客户端设置的,因此在您的示例中没有做任何有用的事情。



 类似资料:
  • 我想知道是否可以从客户端解决这个问题,因为我在内部没有任何访问API的权限。 有人能帮我解决这个问题吗? 以下是newsactions.js的代码: 如果您需要更多的信息或有问题,请在下面评论。 谢谢你。

  • 问题内容: 我正在尝试通过React应用程序中的Axios进行API调用,但是我在浏览器中遇到了CORS问题。我想知道我是否可以从客户端解决此问题,因为我内部没有对API的任何访问权。附加的是我的代码。 附件是我的WebPack.config.js 问题答案: 理想的方法是向服务器添加CORS支持。 您也可以尝试使用单独的jsonp模块。据我所知axios不支持jsonp。因此,我不确定您使用的方

  • 我正在尝试通过我的React应用程序中的Axios进行API调用。但是,我在浏览器上遇到了这个CORS问题。我想知道我是否可以从客户端解决这个问题,因为我在内部没有任何对API的访问权限。附件是我的代码。 附件是我的WebPack.config.js

  • 问题内容: 我实现了一个ajax轮询脚本,该脚本每10秒在服务器Controller中调用一次操作。通过响应,我替换了的内容: 这是通过 https 完成的。经过一段时间的“空闲”,IE会显示以下消息: 该页面正在访问不受其控制的信息。这带来了安全风险。你想继续吗? 如果用户单击“ 是” ,则页面将重定向到仅显示响应的页面。如果用户单击“ 否” ,则什么都不会发生,但是不会刷新容器。 我知道我可以

  • 我正在尝试使用雅虎气象服务的以下HTTPSendpoint: 雅虎天气服务API 我正在根据API进行一些特殊查询,以获取某些参数化位置的当前天气。 位置是一个提供属性“name”的类,该属性是位置的字符串描述,例如“New York”或“Manila”。 其他类只映射返回的对象。 执行时,我得到以下HTTP响应: 这意味着我无权从我所了解的内容访问资源。 如果我只是复制,URL效果很好 雅虎天气

  • 我的映射器: parsedunsignedshort 所以你可以在上面看到触发器在“源”中是一个ParsedUnsignedShort,在“目标”中是一个Long。在我得到这个的时候,有一个名字冲突: 错误:(42,6)Java:无法将属性“cat.tmatic.mh.domain.pl6xx.ParseDunSignedShort触发器”映射到“java.lang.Long触发器”。考虑声明/实