从Angular中的不同本地主机获取数据

Posted

技术标签:

【中文标题】从Angular中的不同本地主机获取数据【英文标题】:fetch data from different localhost in Angular 【发布时间】:2018-05-16 10:27:48 【问题描述】:

在 Angular 中,ng serve --port 4200 --host 0.0.0.0 创建一个 http 服务器实例。有人告诉我,为了从 Angular 中的服务器端脚本获取数据,需要另一个 localhost。

在 ngOnInit 中我获取数据:

  ngOnInit()
    this.http.get('http://localhost/echo.php').subscribe(data => 
      console.log(data);      
    );
  

此提取在 Network tab of Developer tools 中有一个状态代码 200,但我在控制台中收到了 CORS 错误:

Failed to load http://localhost/echo.php: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

似乎是不同的端口导致了这种情况。我应该怎么做才能防止这种情况发生?浏览器本身通过获取此文件没有问题,抱怨的是 Angular。

更新:我遵循了建议并提出了一个新错误。这次是:GET http://localhost:4200/backend/echo.php 504 (Gateway Timeout)

“其他”服务器配置为侦听端口 80,DocumentRootbackend ..

proxy.conf.json:


  "/backend/*": 
    "target": "http://localhost:80",
    "secure": false,
    "logLevel": "debug"
  

.ts:

  ngOnInit()
    this.http.get('http://localhost:4200/backend/echo.php').subscribe(data => 
      console.log(data);      
    );
  

文件结构:

【问题讨论】:

XMLHttpRequest cannot load https://www.[website].com/的可能重复 它与 Angular 无关。这是浏览器 javascript 安全性的核心特性。 @Quentin 我认为它可能与 Angular 有关。 angular.io/api/platform-browser/DomSanitizer. @Pac0 — 仅当 Angular 是用 JavaScript 编写时,它才与 Angular 相关。该 URL 似乎与问题无关。 我试过这个看看它是否会起作用。但事实并非如此。如果您使用的是 WAMP,如果您的 URL 文件在文件夹中,则可以在 apache 的 httpd.conf 中使用 Directory 标签,如果是另一个域,则可以使用 LocationMatch。我使用该技术能够从角度运行。 【参考方案1】:

您可以通过在您的 Angular 项目中创建一个名为 proxy.conf.json 的文件来代理您的应用程序 http://localhost,其内容如下:


  "/api": 
    "target": "http://localhost",
    "secure": false
  

然后以附加参数--proxy-config proxy.conf.json 开始ng serve

ng serve --port 4200 --host 0.0.0.0 --proxy-config proxy.conf.json

你必须改变你的呼叫然后包括端口和/api前缀:

this.http.get('http://localhost:4200/api/echo.php').subscribe(data => 
...

您可以找到更多详情here

【讨论】:

你可以看github.com/HackPoint/ng-apps我的仓库我也是这样做的 谢谢。现在我在控制台和网络选项卡中收到 504(网关超时)错误 :) 最后的问题是http://localhost 需要替换为http://127.0.0.1。之后,这个解决方案就起作用了。【参考方案2】:

如果你有 Tow loalhost 应用程序,第一个是 Angular 应用程序,在 http://localhost:4200 中运行,另一个是 API 项目,在 http://localhost:3000,在这种情况下,如果从您的 Angular 应用程序向另一个应用程序发出请求,您会收到 CORS 错误,为了解决此问题,您可以逐步使用以下说明:

    在 Angular 项目的主文件夹中创建一个文件并将其命名为 proxy.config.json,如下图所示:

    然后将代码inside这样创建文件(请注意目标部分):

    
        "/api/*": 
            "target": "http://localhost:3000",
            "secure": false,
            "logLevel": "debug"
        
    
    

    然后更改 package.josn 文件并插入如下图所示的代码“

    毕竟你必须使用 npm start 来运行 Angular 项目

注意:如果您不为 Angular 项目执行此操作,则会出现 CORS 问题。

【讨论】:

以上是关于从Angular中的不同本地主机获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从本地主机获取 Json [重复]

使用 Express 从本地主机获取数据/将数据写入本地主机

Fetch Api:无法从本地主机获取数据

尝试从反应应用程序的本地主机 Web api 端点获取数据 - Cors 错误

如何从angular2中的observable获取数据

将客户端数据存储在 Angular 中的位置,稍后在 REST-API 中用于获取信息