2017-11-26 11 views
0

私はフロントエンドのAngular webpageから呼び出すバックエンドとして簡単な休憩サービスを書いています。以下は呼び出しを行うフロントエンドコードです。 有効な人物が指定された場合、約束が拒否され、エラーメッセージが表示されます。ボタンがユーザによって押された後プロミスallwaysが拒否される

savePerson(person: Person) { 
    const jsonHeader = 'application/json'; 
    const jsonPerson = JSON.stringify(person); 

    return new Promise((resolve, reject) => { 
     this.httpClient.post(this.url, jsonPerson, { 
      headers: new HttpHeaders() 
       .set('Accept', jsonHeader) 
       .set('Content-Type', jsonHeader) 
     }) 
      .toPromise() 
      .then(
       res => { // Success 
        console.log("success"); 
        resolve(res); 
       }, 
       res => { 
        console.log("rejected"); 
        reject(res) 
       } 
      ); 
    }); 
} 

このコードが呼び出さ:

savePerson() { 

    this.myService.savePerson(this.person).then(
     result => { 
      this.showMessage("Saved"); 
     }, 
     error => { 
      console.log(error); 
      this.showMessage("Error when saving") 
     } 
    ); 
} 

(入力された有効な人との)ログインエラー: オブジェクト{ヘッダー:{...}、ステータス:201、 STATUSTEXT: "作成者"、URL: "http://localhost:8080/api/v1.0/person"、[OK]:偽、名前: "HttpErrorResponse"、メッセージ: "http://localhost:8080/api/v1.0/personのための解析中のHttp障害"、エラー:{...}}

私は、これは、Aであると仮定していますフロントエンドアプリの問題です。バックエンドの後退HTTP 201が作成されました。 誰かが私のために問題を特定できれば素晴らしいだろう!

+5

「エラー:{...}」とは何ですか? –

+4

それは価値があるので、そのコードは[Promise creation anti-pattern]に落ち込んでいます(https://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how -do-i-avoid-it#)。そこには「新しい約束」は必要ありません。 –

+0

['Promise'コンストラクタの反パターン]を避けてください(https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi

答えて

1

AngularはHTTPレスポンスを解析しようとしていますが、サーバーは空のHTTPレスポンスで応答しています(おそらく)。応答を角度で伝えるだけでエラーを修正する必要があります:

this.httpClient.post(this.url, jsonPerson, { 
    responseType: 'text', 
    headers: new HttpHeaders() 
     .set('Accept', jsonHeader) 
     .set('Content-Type', jsonHeader) 
}) 
+0

それはそれでした!ありがとう:-) – Coen000

関連する問題