web-dev-qa-db-ja.com

Angular 4: "(不明なURL)のHTTPエラー応答:0不明なエラー"

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は、「http:// ...」ではなく「https:// ...」URLです。

17
user8300647

問題はAngular UniversalがExpressを使用しており、セキュリティがサーバーへのSSL証明書を検証することです。自己署名SSL証明書を使用しました。

解決策は、NODE_TLS_REJECT_UNAUTHORIZED=0を環境に追加して、Node.jsでSSL検証を無効にすることです。 only開発時にこれを設定する必要があります。本番環境では非常に危険です。

@ StephanRauh に同意し、彼にいくつかのポイントを追加したい。これは、リクエストが送信されないか、何らかの理由でサーバーと通信できない場合に発生します
理由は次のとおりです。

  1. インターネット接続がサーバーへの接続に非常に遅い場合、または使用できない場合。
  2. サーバー自体がダウンしています。つまり、リクエストに対するハンドラがありません。
2

バックエンドとフロントエンド間で同じドメイン、同じプロトコル、同じポートにいない。

2
guest

他の誰かがこれにつまずいた場合に備えて、これらの解決策はどれも私にとってはうまくいきませんでした。私のために働いたのは、uBlock Originをオフにすることでした。明らかな理由で、「ad」という単語が含まれるURLをブロックしていました。

1
ymerej

引用 Googleグループのサンダーエリアス

「エラー0は、リクエストが送信されないときに表示されるものです。これの最も一般的な原因は、CORSがサーバー上で正しく構成されていないことです。言い換えると、98%の場合、これはサーバー側の問題です」

1
Stephan Rauh

私はまったく同じ問題を抱えていました。 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));
0
Christian Lutz

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を暗号化しましょう
  • 角度ユニバーサル
  • エクスプレス
0
srokatonie

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にアクセスできます。

0
Manish Jain