角度httpモジュールv4.4.6を使用しています。 Angularアプリケーション(クライアント)がPUT要求(HttpClient
を使用)をサーバーに送信し、サーバーが本体内にデータなしで状況200(OK)を応答すると、角度httpモジュールは3210をスローします。ボディなしのPUTレスポンスで角4のHTTPがスローされる
これは適切な機能ですか、バグですか?
本文にデータがないPUT応答を処理するにはどうすればよいですか?詳細に
は:
最近のバージョンでは、私は通常のHttp
モジュールを使用していると、それは方法置くのです()。ここで本体にJSONデータを取得するにはres.json()
に電話する必要があります。 put()メソッドはObservable<Response>
を返します。
新しいHttpClient
を使用しました。これはput()メソッドです。このメソッドはObservable<Object>
を返します。 json()
メソッドが内部的に呼び出され、私が見ているエラーにつながるようです。
- 角度クライアントは、HttpHeader
'Content-Type': 'application/json'
でPUT要求を作成します。これにより、HTTP PUT要求ヘッダAccept:application/json, text/plain, */*
が生成されます)。 - サーバーはステータス200(OK)で、本文にはデータはありません。
- Angularクライアントは応答を受信し、エラーをスローします。
HttpErrorResponse {headers: HttpHeaders, status: 200, ... error: error: SyntaxError: Unexpected end of JSON input at .. text: "" headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: ... message: "Http failure during parsing for ... name: "HttpErrorResponse" ok: false status: 200 statusText: "OK" url: ...
https://angular.io/guide/http http .get( '/ textfile.txt'、{responseType: 'text'}) // get()によって返されたオブザーバブルはタイプObservable //テキスト応答が指定されたためです。 // 型のパラメータをget()に渡す必要はありません。 .subscribe(data => console.log(data)); –
yonexbat
https://angular.io/api/common/http/HttpClient#put – yonexbat
私は次の文を使用します: 'const response = await this.http.put(this._serverUrl + url、data、options)。 toPromise() ' httpが 'Http'からのものであれば' Response'を返し、 'HttpClient'からのものであればbodyとしてオブジェクトを返します(本体の中にJSONがあることを期待しています)。 –