【发布时间】:2018-03-05 18:02:06
【问题描述】:
我想向我无法控制的外部 API 发出 GET 请求。由于 API 的安全性,我的 react 应用程序无法直接向端点发出 ajax 请求。因此,我正在尝试创建一个简单的代理,如 here
所示我的package.json file 看起来像这样:
{
"name": "my-stack",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-router-dom": "^4.2.2",
"react-scripts": "1.0.13"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"proxy": {
"https://gold-feed.com/paid/*": {
"target": "https://gold-feed.com/paid",
"changeOrigin": true
}
}
}
然后我的 ajax 请求如下所示:
const apiUrl = 'https://gold-feed.com/paid/<apiID>/all_metals_json_usd.php';
jQuery.ajax({
method: 'GET',
url: apiUrl,
success: (item) => {
this.props.addItem(item);
}
});
但它似乎没有做任何事情。我仍然收到以下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
我基本上遇到了与记录在案的 here 相同的问题,他试图创建一个代理来访问 Steam api。
顺便说一句,我相信我正在使用的 create-react-app 项目是从 webpack 捎带而来的。
【问题讨论】:
-
你的问题很有趣,我不是 React 方面的专家,但是,似乎没有代理配置,浏览器正在执行请求,当然,CORS 策略被应用。自己完成的方法应该是,在节点中公开一个Rest API,并且是请求者对api的后端,而我的前端只与我的后端通信,所以前端不关心第三方api的CORS问题。在 react/redux 架构中使用 axios 可能会解决问题,但我不太确定
-
我也遇到过同样的问题,但我只是通过
"proxy": "https://gold-feed.com/paid/" }解决了这个问题。可以这样试试吗? -
我会试试的。你把它放在 package.json 中?
-
如果您使用 webpack-dev-server,请尝试在 webpack.config.js 中使用
devServer: { proxy: { 'https://gold-feed.com/': { target: 'https://gold-feed.com/', secure: false } } }。 -
@Matthew Barbara 不幸的是,这对我不起作用。除了 package.json 中的那一行之外,您是否需要更改其他任何内容?您是否必须在其他任何地方引用代理?谢谢!
标签: reactjs webpack proxy create-react-app