• 技术文章 >web前端 >js教程

    Angular学习之聊聊Http ( 错误处理 / 请求拦截 )

    青灯夜游青灯夜游2022-12-16 19:36:15转载115
    本篇文章带大家继续angular的学习,简单了解一下Angular中的Http处理,介绍一下错误处理和请求拦截,希望对大家有所帮助!

    大前端零基础入门到就业:进入学习

    基本使用

    用 Angular 提供的 HttpClient 可以很轻松的实现 API 接口的访问。【相关教程推荐:《angular教程》】

    举个例子 新建一个 http.service.ts 可以在 environment 中配置不同环境的 host 地址

    再贴一下 proxy.config.json 第一章中有介绍到

    {
      "/api": {
        "target": "http://124.223.71.181",
        "secure": true,
        "logLevel": "debug",
        "changeOrigin": true,
        "headers": {
          "Origin": "http://124.223.71.181"
        }
      }
    }
    import { HttpClient } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import { environment } from '@env';
    
    @Injectable({ providedIn: 'root' })
    export class HttpService {
      constructor(private http: HttpClient) {}
    
      public echoCode(method: 'get' | 'post' | 'delete' | 'put' | 'patch' = 'get', params: { code: number }) {
        switch (method) {
          case 'get':
          case 'delete':
            return this.http[method](`${environment.backend}/echo-code`, { params });
          case 'patch':
          case 'put':
          case 'post':
            return this.http[method](`${environment.backend}/echo-code`, params);
        }
      }
    }

    然后在业务中 我们就可以这样使用

    import { Component, OnInit } from '@angular/core';
    import { HttpService } from './http.service';
    
    @Component({
      selector: 'http',
      standalone: true,
      templateUrl: './http.component.html',
    })
    export class HttpComponent implements OnInit {
      constructor(private http: HttpService) {}
      ngOnInit(): void {
        this.http.echoCode('get', { code: 200 }).subscribe(console.log);
        this.http.echoCode('post', { code: 200 }).subscribe(console.log);
        this.http.echoCode('delete', { code: 301 }).subscribe(console.log);
        this.http.echoCode('put', { code: 403 }).subscribe(console.log);
        this.http.echoCode('patch', { code: 500 }).subscribe(console.log);
      }
    }

    这看起来非常简单 类似 Axios

    下面介绍一下一些常用的用法

    错误处理

    this.http
      .echoCode('get', { code: 200 })
      .pipe(catchError((err: HttpErrorResponse) => of(err)))
      .subscribe((x) => {
        if (x instanceof HttpErrorResponse) {
          // do something
        } else {
          // do something
        }
      });

    请求拦截

    请求拦截是比较常用的

    例如 你可以在这里判断 cookie 是否有效 / 全局错误处理 ...

    新建 http-interceptor.ts 文件 ( 文件名可以随意 )

    最主要的是要实现 HttpInterceptorintercept 方法

    import { HttpInterceptor, HttpRequest, HttpHandler, HttpResponse, HttpErrorResponse } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import { Observable, of, throwError } from 'rxjs';
    import { filter, catchError } from 'rxjs/operators';
    import { HttpEvent } from '@angular/common/http';
    
    @Injectable()
    export class HttpInterceptorService implements HttpInterceptor {
      constructor() {}
      intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next
          .handle(req)
          .pipe(filter((event) => event instanceof HttpResponse))
          .pipe(
            catchError((error) => {
              console.log('catch error', error);
              return of(error);
            })
          );
      }
    }

    然后在 module 中的 providers 中使用 这个拦截器就生效了

    @NgModule({
      imports: [RouterModule.forChild(routes)],
      exports: [RouterModule],
      providers: [
        {
          provide: HTTP_INTERCEPTORS,
          useClass: HttpInterceptorService,
          multi: true,
        },
      ],
    })
    export class XXXModule {}

    更多编程相关知识,请访问:编程教学!!

    以上就是Angular学习之聊聊Http ( 错误处理 / 请求拦截 )的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:Angular.js 前端
    上一篇:一文详解多版本node的安装和管理 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Angular学习之聊聊路由(Routing)• 深入了解Angular(新手入门指南)• Angular学习之详解样式绑定(ngClass和ngStyle)的使用• 浅析Angular变更检测中的DOM更新机制• Angular中什么是变更检测?什么情况下会引起变更检测?• 浅析Angular变更检测中的订阅异步事件
    1/1

    PHP中文网