站長資訊網
最全最豐富的資訊網站

Angular學習之聊聊Http ( 錯誤處理 / 請求攔截 )

本篇文章帶大家繼續angular的學習,簡單了解一下Angular中的Http處理,介紹一下錯誤處理和請求攔截,希望對大家有所幫助!

Angular學習之聊聊Http ( 錯誤處理 / 請求攔截 )

前端(vue)入門到精通課程,老師在線輔導:聯系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

基本使用

用 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 {}
登錄后復制

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
多人伦精品一区二区三区视频| 99无码精品二区在线视频 | 国产成人精品亚洲| 亚洲国产综合精品中文第一| 久久亚洲精精品中文字幕| 精品在线免费观看| 中文国产成人精品久久水| 国产高清在线精品一本大道国产| 2019日韩中文字幕MV| 国产精品WWW夜色视频| 精品亚洲成A人在线观看青青| 无码国内精品久久综合88| 久久精品国产亚洲AV蜜臀色欲| 蜜臀久久99精品久久久久久小说| 国产l精品国产亚洲区在线观看| 91精品国产高清91久久久久久| 国产精品国产三级在线高清观看 | 久久亚洲精精品中文字幕| 精品久久香蕉国产线看观看亚洲| 99久久精品影院老鸭窝| 久久久久一级精品亚洲国产成人综合AV区| 午夜国产精品无套| 免费观看四虎精品成人| 亚洲日韩乱码中文无码蜜桃臀| 日韩高清成人毛片不卡| 国产suv精品一区二区6| 国产在线精品二区韩国演艺界| 国产精品无码久久av| 国产精品李雅在线观看| 国产精品林美惠子在线播放| 国产精品久久久小说| 国产亚洲蜜芽精品久久| 国产乱人伦偷精精品视频| 日韩精品成人a在线观看| 日韩精品无码一区二区视频| 日韩av.com| 日韩乱码中文字幕视频| 精品无码av无码专区| 无码欧精品亚洲日韩一区夜夜嗨| 无码国模国产在线无码精品国产自在久国产 | 国产精品V亚洲精品V日韩精品|