如何在角度 2 中处理 302

Aru*_*agi 7 javascript ajax http angular

我收到状态 302 的错误但是在尝试在 catch 中记录错误时我收到了 200

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);
}
Run Code Online (Sandbox Code Playgroud)

要求我想发送另一个关于重定向 URL 重定向的帖子调用。如何获取重定向 URL。

需要帮忙。

Pet*_*erS 7

我知道迟到的答案,但对于任何遇到此问题的人。

简短的回答是你不能,因为浏览器处理 302 本身并且不会告诉 angular 任何关于它的信息。您可以做的是设置一个拦截器样式类来监视正在发生的事情。

谷歌的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....
}
Run Code Online (Sandbox Code Playgroud)

如果我突然转到 text/html 而不是 application/json,我也可以在标题上看到。嗯,这是我可以检查的另一个变化:

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

您可能还有其他可以检查的参数,但是这些参数足以为我检测重定向。诚然,这是关于被重定向到登录而不是另一个例子,希望您得到足够的不同更改检查,以决定您是否有 302。