Maison > interface Web > js tutoriel > le corps du texte

Angular Learning Chat Http (gestion des erreurs/interception des demandes)

青灯夜游
Libérer: 2022-12-16 19:36:15
avant
2488 Les gens l'ont consulté

Cet article vous amènera à continuer à apprendre Angular, à comprendre brièvement le traitement Http dans Angular et à présenter la gestion des erreurs et l'interception des demandes. J'espère qu'il sera utile à tout le monde !

Angular Learning Chat Http (gestion des erreurs/interception des demandes)

Utilisation de base

Grâce au HttpClient fourni par Angular, vous pouvez facilement accéder à l'interface API. [Tutoriels associés recommandés : "Tutoriel angulaire"]

Par exemple, créez un nouveau http.service.ts Vous pouvez configurer les adresses d'hôte de différents environnements dans environnement<code>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"
    }
  }
}
Copier après la connexion
import { HttpClient } from &#39;@angular/common/http&#39;;
import { Injectable } from &#39;@angular/core&#39;;
import { environment } from &#39;@env&#39;;

@Injectable({ providedIn: &#39;root&#39; })
export class HttpService {
  constructor(private http: HttpClient) {}

  public echoCode(method: &#39;get&#39; | &#39;post&#39; | &#39;delete&#39; | &#39;put&#39; | &#39;patch&#39; = &#39;get&#39;, params: { code: number }) {
    switch (method) {
      case &#39;get&#39;:
      case &#39;delete&#39;:
        return this.http[method](`${environment.backend}/echo-code`, { params });
      case &#39;patch&#39;:
      case &#39;put&#39;:
      case &#39;post&#39;:
        return this.http[method](`${environment.backend}/echo-code`, params);
    }
  }
}
Copier après la connexion

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

import { Component, OnInit } from &#39;@angular/core&#39;;
import { HttpService } from &#39;./http.service&#39;;

@Component({
  selector: &#39;http&#39;,
  standalone: true,
  templateUrl: &#39;./http.component.html&#39;,
})
export class HttpComponent implements OnInit {
  constructor(private http: HttpService) {}
  ngOnInit(): void {
    this.http.echoCode(&#39;get&#39;, { code: 200 }).subscribe(console.log);
    this.http.echoCode(&#39;post&#39;, { code: 200 }).subscribe(console.log);
    this.http.echoCode(&#39;delete&#39;, { code: 301 }).subscribe(console.log);
    this.http.echoCode(&#39;put&#39;, { code: 403 }).subscribe(console.log);
    this.http.echoCode(&#39;patch&#39;, { code: 500 }).subscribe(console.log);
  }
}
Copier après la connexion

这看起来非常简单 类似 Axios

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

错误处理

this.http
  .echoCode(&#39;get&#39;, { code: 200 })
  .pipe(catchError((err: HttpErrorResponse) => of(err)))
  .subscribe((x) => {
    if (x instanceof HttpErrorResponse) {
      // do something
    } else {
      // do something
    }
  });
Copier après la connexion

请求拦截

请求拦截是比较常用的

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

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

最主要的是要实现 HttpInterceptorintercept

Postez-le à nouveau proxy.config.json Il a été introduit dans le chapitre 1

import { HttpInterceptor, HttpRequest, HttpHandler, HttpResponse, HttpErrorResponse } from &#39;@angular/common/http&#39;;
import { Injectable } from &#39;@angular/core&#39;;
import { Observable, of, throwError } from &#39;rxjs&#39;;
import { filter, catchError } from &#39;rxjs/operators&#39;;
import { HttpEvent } from &#39;@angular/common/http&#39;;

@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(&#39;catch error&#39;, error);
          return of(error);
        })
      );
  }
}
Copier après la connexion
@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: HttpInterceptorService,
      multi: true,
    },
  ],
})
export class XXXModule {}
Copier après la connexion
Ensuite, nous pouvons l'utiliser comme ça en entreprise

rrreeeCela semble très simple et similaire à Axios

Voici quelques usages courants🎜

🎜Gestion des erreurs🎜🎜rrreee

🎜Demande d'interception🎜🎜🎜Demande d'interception est plus couramment utilisé🎜🎜Par exemple, vous pouvez juger si le cookie est valide/gestion globale des erreurs ici...🎜🎜Créez un nouveau fichier http-interceptor.ts (le nom du fichier peut être arbitraire )🎜🎜Le plus important est d'implémenter la méthode intercept de HttpInterceptor🎜rrreee🎜Ensuite, utilisez cet intercepteur dans les fournisseurs du module pour prendre effet🎜rrreee🎜Pour en savoir plus connaissances liées à la programmation, veuillez visiter :🎜Enseignement de la programmation 🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!