【发布时间】:2018-06-27 20:08:44
【问题描述】:
您好,我构建了一个 Angular 应用程序(Angular 6),它在客户端执行 api 请求。简单的 api 请求位于 service.ts 文件中,如下所示:
getApi(endpoint) {
return this.http.get(`https://www.myapi.com/api-${endpoint}`);
}
当用户单击 .html 文件中的按钮时,将调用此 getApi 函数。
然后是这个问题,我在尝试执行http get请求时在控制台中收到以下错误。
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
通过安装this CORS 插件,我能够绕过此错误并成功获取请求。通话有效,我的应用程序有效,所以我知道我的代码有效。我希望我的应用在没有这个插件的情况下也能正常工作。
经过一些研究,我了解到这是我正在使用的 API 的问题,而不是我的应用程序问题。我什至联系了 api 支持并得到了这个回复:
I checked with the Devs and they confirmed that our API is not designed to be consumed from JS. JS -> SERVER WRAPPER -> AHREFS API (this is how the flow should be). So you should create a server-side wrapper to use AHREFS API.
那么现在我的问题来了,JS/angular 中的 server wrapper 到底是什么?听起来我需要从服务器端而不是客户端调用 API,但我还不知道该怎么做。
由于我没有提供我的整个代码,所以我不是在寻找人来重写我的代码以使其正常工作,而是我更希望有人为我指出正确的方向,以解决我的问题,也许是一些示例代码、理论,或外部阅读的链接。尽管如果需要,我愿意提供我的代码。
我希望有一个解决方案,而无需重新编写我的整个应用程序。但如果需要,我会的。
谢谢!
【问题讨论】:
-
如果您提供正在使用的后端语言和/或框架,我可以为您指明正确的方向。
-
您如何托管您的网站?托管您网站的服务器上有后端代码,该代码将连接到 api。
-
Liquidweb 似乎面向 WordPress 托管(这是非常标准的),因此您应该能够运行 php.ini。所以基本上,您需要做的就是在您的 public_html 文件夹中放置一个 php 文件,然后对该 PHP 文件进行编码以 ping API。 PHP 文件可以通过您提供给该文件的 url 访问://yoursite.com/file.php 如果您正在运行本地服务器(例如 MAMP、WAMP 等),您可以在本地进行测试。如果您不这样做没有这些,如果你的电脑上安装了 PHP 语言,你可以通过终端运行一个简单的 PHP 服务器。
-
另外,如果你想在你的答案中加入最后一条评论,我会接受它
-
我确实更新了我的答案。