angular - 在 Angular 7 中解析 HTTP 响应?

标签 angular http angular7

服务器返回以下格式的数据:{"query": 'queryName', 'result': []}

我只需要得到结果部分,为此我这样做了:

export class RequestInterception implements HttpInterceptor {

  public constructor(private route: Router) {

  }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).do((event: HttpEvent<any>) => {
     if (event instanceof HttpResponse) {
            return event.body['result'];
     }
    }, (err: any) => {
        if (err instanceof HttpErrorResponse) {
             if (err.status === 401) {
               this.route.navigate(['/login']);
             }

          return throwError('backend comm error');

        }
    })

};

do 运算符中我尝试了以下操作:

return event.body['result'];

但它仍然返回我整个对象。

AppModule 是:

 providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestInterception,
      multi: true
    },
  ],

最佳答案

如果您想在拦截器中转换响应,则可以使用 map 运算符来完成。您还可以使用 catchError 运算符,然后在其中使用 throwError,以防状态代码为 401

类似这样的事情:

import { Injectable } from '@angular/core';
import { 
  HttpInterceptor, HttpRequest, HttpResponse, 
  HttpHandler, HttpEvent, HttpErrorResponse 
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import { Router } from '@angular/router';

@Injectable()
export class InterceptorService implements HttpInterceptor {

  constructor(private route: Router) { }

  intercept(
    req: HttpRequest<any>, 
    next: HttpHandler
  ) {
    return next.handle(modified)
      .pipe(
        map((event: HttpResponse<any>) => {
          event['body'] = event.body['result'];
          return event;
        }),
        catchError((error: HttpErrorResponse) => {
          if (error.status === 401) {
            this.route.navigate(['/login']);
          }
          return throwError('backend comm error');
        })
      );
  }

}

这是一个Sample StackBlitz供您引用。

关于angular - 在 Angular 7 中解析 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067387/

相关文章:

angular - 模板中对象的输入在 Angular 10 中给出错误 "Property is used before its initialization"

angular - TS2304 : Cannot find name 'describe' or 'expect'

Angular Material 对话框 - 将类型传递到对话框组件中

javascript - 组件传值给JS

javascript - Angular 4 FormGroup - 将父表单控件传递给子组件

angular - 如何测试可观察流?

.net - HttpWebRequest - POST 中不允许使用括号

java - 设置 HTTP 响应代码和 HTTP 方法

http 和线程

angular - 路由 URL 不像以前在 Angular 7 中那样工作