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

青灯夜游
Freigeben: 2022-12-16 19:36:15
nach vorne
2373 Leute haben es durchsucht

本篇文章带大家继续angular的学习,简单了解一下Angular中的Http处理,介绍一下错误处理和请求拦截,希望对大家有所帮助!

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" } } }
Nach dem Login kopieren
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); } } }
Nach dem Login kopieren

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

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); } }
Nach dem Login kopieren

这看起来非常简单 类似Axios

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

错误处理

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

请求拦截

请求拦截是比较常用的

例如 你可以在这里判断 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, next: HttpHandler): Observable> { return next .handle(req) .pipe(filter((event) => event instanceof HttpResponse)) .pipe( catchError((error) => { console.log('catch error', error); return of(error); }) ); } }
Nach dem Login kopieren

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

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

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

Das obige ist der detaillierte Inhalt vonAngular学习之聊聊Http ( 错误处理 / 请求拦截 ). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!