首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular5 http响应拦截器无法读取状态代码

Angular5 http响应拦截器无法读取状态代码
EN

Stack Overflow用户
提问于 2017-12-16 05:49:14
回答 4查看 7K关注 0票数 2

我试图拦截http响应并重定向任何401 s,但是下面的err对象只返回以下字符串。我本来希望至少能找到状态代码..。

401 -未经授权的详细信息:http://localhost:4200/api/foo的Http故障响应: 401未经授权

在“网络”选项卡中,我可以看到服务器正在返回格式良好的401。关于我如何正确阅读它们,有什么想法吗?

代码语言:javascript
复制
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const authRequest = request.clone({
        setHeaders: {
            Authorization: `Bearer ${this.authService.getToken() || ''}`
        }
    });

    return next.handle(authRequest).do(event => { }, err => {
        if (err instanceof HttpErrorResponse && err.status === 401) {
            this.authService.handleAuthentication();
        }
    });
}

编辑:我刚刚注意到,如果我关闭web服务器强制504网关超时,我得到的错误作为一个完整的字符串,没有错误代码。

504 -网关超时详细信息:http://localhost:4200/api/foo的Http故障响应: 504网关超时

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-22 22:10:19

好的,这里的问题是,我有一个预先存在的错误拦截器,它在401拦截器之前修改响应。这家伙把一切都搞砸了。感谢以上所有的回复。

票数 1
EN

Stack Overflow用户

发布于 2017-12-16 06:02:06

尝试使用catch

代码语言:javascript
复制
return next
    .handle(authReq)
    .do(event => {
        if (event instanceof HttpResponse) {
            /* Make your code here */
        }
    })
    .catch((err) => {
        if (err.status === 401 && err.statusText === 'Unauthorized') {


        }
        return Observable.throw(err);
    });
票数 1
EN

Stack Overflow用户

发布于 2017-12-16 08:46:10

通过执行以下操作,我能够使我的Auth阻断器在角度5中正确地工作:

auth.interceptor.ts

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import {
    HttpErrorResponse,
    HttpEvent,
    HttpHandler,
    HttpInterceptor, 
    HttpRequest,
} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

import { AuthService } from '../services/auth.service';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  constructor(
      private authService: AuthService
  ) { }

  public intercept(
      req: HttpRequest<any>,
      next: HttpHandler,
  ): Observable<HttpEvent<any>> {
    return this.authService.getToken().flatMap((token: string) => {
      return next.handle(req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }));
    }).do(() => { }, (error: any) => {
      if (error instanceof HttpErrorResponse && (error as HttpErrorResponse).status === 401) {
        this.authService.login();
      }
    });
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47842939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档