2017-11-18 4 views
1

角度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: ...

+1

https://angular.io/guide/http http .get( '/ textfile.txt'、{responseType: 'text'}) // get()によって返されたオブザーバブルはタイプObservable //テキスト応答が指定されたためです。 // 型のパラメータをget()に渡す必要はありません。 .subscribe(data => console.log(data)); – yonexbat

+1

https://angular.io/api/common/http/HttpClient#put – yonexbat

+0

私は次の文を使用します: 'const response = await this.http.put(this._serverUrl + url、data、options)。 toPromise() ' httpが 'Http'からのものであれば' Response'を返し、 'HttpClient'からのものであればbodyとしてオブジェクトを返します(本体の中にJSONがあることを期待しています)。 –

答えて

2

@yonexbat、おかげであなたは正しいです。

....

const response = this.http.put(url, data, { responseType: 'text'}).toPromise(); 

を使用している場合...問題が解決されます。