Angular 4:“(未知URL)的Http失败响应:0未知错误”

时间:2018-02-01 07:25:18

标签: angular typescript https httpclient angular4-httpclient

我正在尝试使用API​​网址。我使用以下代码调用API。

import {HttpClient, HttpClientModule, HttpParams} from "@angular/common/http";

@Injectable()
export class PropertyPrefService {

    constructor(private http: HttpClient,
                private configurationService:Configuration) {}

    public searchProjects(propFilter:string):any{
        let temp:any;
        const options = propFilter ?
        {
            params: new HttpParams().set('query', propFilter)
        } : {};

        return this.http.get<any>(this.configurationService.propertySystemApiUrl, options)
                    .subscribe((results:any) => {
                        console.log(results);
                    });
    }

在Angular代码中,我没有得到任何回复并且收到错误:

  

(未知网址)的Http失败响应:0未知错误“。

但是,当我在Chrome上打开开发者工具时发出请求时,我看到响应是从服务器收到的。

网址是“https:// ...”网址,而不是“http:// ...”。

9 个答案:

答案 0 :(得分:4)

问题是Angular Universal使用Express,安全性验证服务器的SSL证书;我使用了自签名SSL证书。

解决方案是将NODE_TLS_REJECT_UNAUTHORIZED=0添加到您的环境中以禁用Node.js中的SSL验证。您应该在开发中设置它;在生产中它是非常危险的。

答案 1 :(得分:2)

您不在相同的域,相同的协议,后端和前端之间的相同端口。

答案 2 :(得分:2)

同意@StephanRauh,并希望向他添加几分。当请求未发出或由于某种原因无法与服务器通信时,就会发生这种情况。
原因可能是:

  1. 如果互联网连接到服务器的速度非常慢或根本无法使用。
  2. 服务器本身已关闭,即没有用于我们请求的处理程序。

答案 3 :(得分:1)

引用Sander Elias on Google Groups

“错误0是您在请求未发出时获得的。最常见的原因是服务器上的CORS配置不正确。让我改为:在98%的情况下,这是一个服务器端问题。“

答案 4 :(得分:1)

以防万一其他人迷失了方向,这些解决方案都不适合我。对我有用的是关闭uBlock Origin。出于明显的原因,它阻止了其中包含“ ad”一词的所有网址。

答案 5 :(得分:0)

我有完全相同的问题。我能够在Chrome开发者工具中看到结果。但我总是收到Http failure response for (unknown url): 0 Unknown Error错误消息。

就我而言,原因是我使用responseType:'text'来查询有效负载text/html。但由于某种原因,这并不兼容。我不得不切换到responseType: 'blob'并使用FileReader将blob转换为字符串。

因此,如果返回的内容与您配置的responseType不匹配,我猜您会遇到同样的问题。顺便说一下,它是json

   this.httpClient.get(url, {responseType: 'blob'})
        .subscribe(data => {
          const reader = new FileReader();
          reader.onloadend = (e) => {
            const readerResult = reader.result;
            console.log(readerResult); // Print blob content as text
          };
          reader.readAsText(data, 'UTF-8');

        }, error => console.log(error));

答案 6 :(得分:0)

从iPhone / iPad设备测试角度应用程序时遇到了这个问题。应用在桌面上运行良好。我在节点服务器上启用了cors,但仍然收到此错误。因此,我做了以下解决。

使用IP ng serve --host 192.168.1.10

运行ng服务

使用IP的Point API: 在environment.ts中,我将URL更改为以下内容:

apiUri: 'http://192.168.1.10:9000/api'

现在我可以从移动设备访问URL。

答案 7 :(得分:0)

TL; DR:/etc/hosts缺少域名输入。

在Angular Universal中,我遇到了一个问题,即SSR部分由于该服务器端渲染发生在服务器(;)上而引发了该错误。

说我的网站在https://myproject.com/上并且运行良好。当您直接点击任何URL时,SSR将启动。现在,如果SSR必须进行API调用,它将向本地网络中的https://myproject.com/api/blah/show发出HTTP请求。这就是它抛出错误的地方。

要进行调试,我尝试在VPS上运行curl https://myproject.com/api/blah/show,但会收到错误消息。

要解决此问题,我必须将以下行添加到我的/etc/hosts文件中:

127.0.0.1 myproject.com

此后,curl命令和SSR都可以正常工作!

堆栈:

  • Ubuntu 16和18
  • Nginx
  • 让我们加密SSL
  • Angular Universal
  • 快递

答案 8 :(得分:0)

当我尝试在我的角度项目中使用Azure搜索服务时遇到了这个问题。 然后,当我启用了接受来自所有来源的请求的CORS时,我便开始获得响应。

请在Chrome中检查开发人员工具(控制台)。它可以使您对请求有一些见识。