如何在 Angular 中进行服务器端 API 调用以绕过 CORS 错误



我构建了一个在客户端执行API请求的Angular 6应用程序。简单的 API 请求位于 service.ts 文件中,如下所示:

getApi(endpoint) {
return this.http.get(`https://www.myapi.com/api-${endpoint}`);
}

当用户单击.html文件中的按钮时,将调用此getApi函数。

然后是这个问题,我在尝试执行http get请求时在控制台中收到以下错误。

请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"http://localhost:4200"。

我能够通过安装此 CORS 插件绕过此错误并成功获取请求。调用有效,我的应用程序有效,因此我知道我的代码有效。我希望我的应用程序在没有此插件的情况下运行。

经过一些研究,我了解到这是我使用的 API 的问题,而不是我的应用程序问题。我什至联系了 API 支持并得到了以下响应:

我与开发人员进行了检查,他们确认我们的API不是为从JS消费而设计的。JS -> SERVER WRAPPER -> AHREFS API(这是流程应该的样子(。所以你应该创建一个服务器端包装器来使用 AHREFS API。

所以现在我的问题是,JS/Angular 中的"服务器包装器"到底是什么?听起来我需要从服务器端而不是客户端调用 API,但我还不知道该怎么做。

我正在寻找示例代码、理论或外部阅读的链接。 我更喜欢一个不需要重写整个应用程序的解决方案,但如果需要,我会这样做。

简短的回答是,server wrapper是前端代码对自己站点服务器的调用。然后服务器端代码将发送 API get 请求。

API 必须手动启用基于浏览器的请求,因为此类请求的默认处理方式是禁止它们。之所以实施此策略,是因为对不同域的基于浏览器的请求很容易用于发出恶意请求,通常称为跨站点请求伪造。

编辑

在得知您的网站托管在liquidweb上后,以下内容应该使您能够进行您需要做的服务器端编码。

Liquidweb似乎面向WordPress托管(这是非常标准的(,所以你应该能够运行php。

所以基本上,你需要做的就是在你的public_html文件夹中放一个php文件,然后编写该PHP文件来pingAPI。PHP文件可以通过您提供给该文件的URL访问://yoursite.com/file.php 如果您正在运行本地服务器(如MAMP,WAMP等(,则可以在本地对此进行测试。

如果你没有这些,如果你的电脑上安装了PHP语言,你可以通过终端运行一个简单的PHP服务器。

最新更新