2016-10-16 53 views
1

我在抓我的部件返回我的HTTP服務的對象有一個問題:返回從服務組件HTTP狀態代碼 - 角2

這是我在我的服務代碼:

login(username,password){ 
     let headers = new Headers(); 
     headers.append('Content-Type','application/json'); 

     return this.http.post(this.configEnvironment.url() + "oauth/access_token", 
      JSON.stringify(
       { 
        username: username, 
        password: password, 
        grant_type: "password", 
        client_id: "xxxx", 
        client_secret: "xxxxx" 
       } 
      ), 
      { headers } 
     ) 
     .map(res => res.json()) 
     .catch((err:Response) => { 
      let details = err.json(); 

      return Observable.throw(details); 
     }); 

    } 

這是我在我的組件代碼:

this.loginService.login(this.model.username,this.model.password) 
      .subscribe(
       data => console.log(data), 
       error => { 
        // var details = error.json(); 
        console.log(error); 
       }, 
       () => console.log("Finished") 
      ); 

它正常工作時,我只返回JSON的錯誤是這樣的:

let details = err.json(); 
    return Observable.throw(details); 

但是當我嘗試添加的HTTP響應狀態代碼:

return { status: err.status, error: Observable.throw(details) } 

它給我的錯誤:

「類型的參數「(ERR:響應)=> {status:number;錯誤:ErrorObservable; }'不能分配給類型爲'(err:any,caught:Observable)=> ObservableInput'的參數。 輸入'{status:number;錯誤:ErrorObservable; }'不可分配爲鍵入'ObservableInput'。 輸入'{status:number;錯誤:ErrorObservable; }'不能分配給類型'ArrayLike < {}>'。 類型'{status:number;錯誤:ErrorObservable; }」。」

我的目標只是包括在捕撈的返回HTTP響應代碼。

回答

4

嘗試下面的代碼,

.catch((err:Response) => { 
      let details = {detail:err.json(),status: err.status}; 
      return Observable.throw(details); 
}); 
+0

感謝的人,這一次的作品! –

+1

歡迎。只是想通知你,昨天你問了一個問題,我回答。答案是正確的,並立即刪除它。切勿這樣做,因爲如果遇到相同的情況,它可能會幫助其他用戶找出問題和解決方案。 – micronyks

+0

哎呀,對不起,男人,是的,永遠不會再做。再次感謝! –

0

只是試試這個

return [{ status: err.status, error: err.json() }] 

這應該工作

或者你也可以簡單地發送整個err對象在catch塊和在訂閱時檢查狀態碼這一個也適用。

return err 

,並在認購時使用

err.status

+0

micronyks回答工作 –

+0

它的okii,很高興聽到你有你的答案,你可以嘗試我的一個太替代:) –