2016-06-22 35 views
3

我得到的錯誤與狀態302 但是當試圖登錄catch錯誤我得到200如何處理302在角2

post(url, data, successCallBack, errCallback) { 
     return this.http.post(apiDomain + url, JSON.stringify(data), { 
      headers: this.headers 
     }).catch(this.handleError).subscribe(
      (res) => { 
       successCallBack(res.json()); 
      }, 
      (err) => { 
       errCallback(err); 
      } 
      ); 
    } 

private handleError(error: any) { 
    let errMsg = (error.message) ? error.message : 
     error.status; 
    console.log(error.status); // log is 200 
    console.log(error) 
    console.error(errMsg); 
    return Observable.throw(errMsg); 
} 

要求我要對重定向URL重定向到再派後調用。 如何獲取重定向網址。

需要幫助。

回答

1

遲到的答案我知道,但任何人都在這個問題上磕磕絆絆。

簡短的回答是,你不能像瀏覽器處理302本身一樣,不會告訴任何有關的事情。你可以做的是設置一個攔截器樣式類來監視正在發生的事情。

谷歌對於angular2 http攔截器或類似的,它比你上面的例子有點強大,可以監視每個XHR連接。一個例子是在這裏:

https://www.illucit.com/blog/2016/03/angular2-http-authentication-interceptor/

這是什麼現在可以是任何連接會通過你的攔截器。由於我們無法監控302,我們必須考慮可能發生的情況。例如在我的示例中,請求突然將url更改爲我的身份驗證。

大,所以我的僞代碼第1位將是:

if (response.url.contains('my-auth string')) { 
    redirect.... 
} 

我還可以看到頭提供的,而不是應用程序/ JSON我突然去text/html的。嗯,這是我可以檢查的另一個變化:

if (response.url.contains('my-auth string') && response.headers['content-type'] == 'text/html') { 
    redirect.... 
} 

您可能有其他參數可以檢查,但是這些參數足以爲我檢測重定向。誠然,這是關於重定向到登錄,而不是另一個例子,希望你得到足夠明顯的變化檢查你是否有一個302.