19

我正在尝试使用 API URL。我正在使用以下代码调用 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 代码中,我没有得到任何响应并且出现错误:

(未知 url)的 Http 失败响应:0 未知错误”。

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

该 URL 是“https://...” URL 而不是“http://...”。

4

10 回答 10

8

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

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

于 2018-03-09T23:44:35.150 回答
3

在 Google Groups 上引用Sander Elias 的话

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

于 2018-03-12T09:40:42.193 回答
2

您不在后端和前端之间的同一个域、相同的协议、相同的端口中。

于 2018-02-25T01:40:31.893 回答
1

以防万一其他人偶然发现,这些解决方案都不适合我。对我有用的是关闭 uBlock Origin。出于显而易见的原因,它阻止了任何包含“广告”一词的网址。

于 2018-07-24T23:17:38.383 回答
1

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

  1. 如果互联网连接非常慢,连接到服务器或根本不可用。
  2. 服务器本身已关闭,即我们的请求没有处理程序。
于 2018-10-03T11:14:54.620 回答
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));
于 2018-03-01T08:36:45.107 回答
0

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

使用 IP 运行 ng serve:ng serve --host 192.168.1.10

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

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

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

于 2019-02-25T22:40:14.820 回答
0

我从节点 8 切换到节点 12,问题神奇地消失了。

于 2022-01-22T21:46:34.327 回答
0

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

请在您的 chrome 中检查您的开发人员工具(控制台)。它可以为您提供有关请求的一些见解。

于 2019-10-28T18:35:19.933 回答
0

TL;DR:/etc/hosts缺少带有域名的条目。

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

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

为了调试,我尝试curl https://myproject.com/api/blah/show(在 VPS 上)运行,但我得到了一个错误。

为了解决这个问题,我必须在我的/etc/hosts文件中添加以下行:

127.0.0.1 myproject.com

之后,curl命令和 SSR 都起作用了!

堆:

  • Ubuntu 16 和 18
  • Nginx
  • 让我们加密 SSL
  • 角通用
  • 表达
于 2019-07-26T12:35:48.277 回答