首页 > 其他分享 >angular—如何制作一个HTTP拦截器

angular—如何制作一个HTTP拦截器

时间:2024-11-07 14:46:20浏览次数:5  
标签:拦截器 HTTP 请求 http private return import angular

原文链接:angular—如何制作一个HTTP拦截器 – 每天进步一点点

HTTP拦截器在开发过程中十分常见。在构建项目时,最好就直接创建一个HTTP拦截器,否则遇到以下几种问题,再进行改动就会十分浪费时间。

需要给所有的请求修改请求地址。

需要给所有的请求参数设置新的请求报文首部。

需要监听所有请求的状态码。

1.创建项目

前面的一些文章中简单说过创建angular项目的过程,可以简单参考。

项目创建完毕后,我们打开app.module.ts,我们导入httpClient。

app.module.ts:

import { HttpClientModule } from '@angular/common/http';



imports: [
    HttpClientModule
  ],

然后我们创建HttpService.ts文件:

import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; import { from, Observable, of } from "rxjs"; import {catchError,map,tap,retry} from 'rxjs/operators' import { resolve } from "url"; @Injectable()   export class HttpService{ private baseUrl='https://jsonplaceholder.typicode.com';   constructor( public http:HttpClient){}   private extractData(res:Response){ const body=res; return body || {}; }     private handleError<T>(operation ='opertion', result?:T){ return (error:any): Observable<T> => { console.error(error); console.log(`${operation} failed: ${error.message}`); return of(result as T); }; } }

baseUrl是网络请求通用的地址,这样发生网络请求时就不需要重复写了。extractData这个方法是用来对请求参数进行处理的,在这个例子中,我们虽然不需要处理请求参数,但是我们还是把这部分预留出来了。 handleError用来截获异常情况。这几个方法不需要对外公布,所以使用private进行修饰。

2.加入请求方法
import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; import { Observable, of } from "rxjs"; import {catchError,map,tap,retry} from 'rxjs/operators' @Injectable()   export class HttpService{ private baseUrl='https://jsonplaceholder.typicode.com';   constructor( public http:HttpClient){} //get方法 public get(url:string):Observable<any>{ return this.http.get(this.baseUrl + url).pipe( retry(2), map(this.extractData), tap( ()=> {}), catchError(this.handleError('get',[])) ); } //post方法 public post(url:string, data:any={}):Observable<any>{ return this.http.post(this.baseUrl + url,data).pipe( retry(2), map(this.extractData), tap( ()=> {}), catchError(this.handleError('get',[])) ); }   private extractData(res:Response){ const body=res; return body || {}; }     private handleError<T>(operation ='opertion', result?:T){ return (error:any): Observable<T> => { console.error(error); console.log(`${operation} failed: ${error.message}`); return of(result as T); }; } }

我们在GET和POST请求中都是将baseUrl拼接在前面,retry是网络请求失败时重试的次数,map中存放了我们的请求参数,这个网络请求最终会返回一个可观察对象Observable。

然后在app.module.ts中加入 HttpService的引用

import { HttpService } from './http-service';

@NgModule({
  ...
  providers: [HttpService ],
...
})
 
3.测试

我们在app.componet.ts文件中加入下面的代码:

  constructor(private http:HttpService){
    this.http.get('/todos/1').subscribe(res=>{
      console.log(res)
    })
  }

然后就可以在控制台中看到下面返回的数据了

标签:拦截器,HTTP,请求,http,private,return,import,angular
From: https://www.cnblogs.com/longkui-site/p/18532245

相关文章

  • angular组件间的数据输入——input
    原文链接:angular组件间的数据输入——input–每天进步一点点0.背景我们前面一篇文章简单介绍了angular如何引用其他组件,这篇文章简单介绍一下angualr组件之间如何传输数据。一个使用场景:我们定义了一个学生组件,学生有自己的姓名、年龄,语文成绩、数学成绩、英语成绩,然后其他......
  • 使用 vscode 简单配置 ESP32 连接 Wi-Fi 每日定时发送 HTTP 和 HTTPS 请求
    最新博客文章链接文字更新时间:2024/11/07由于学校校园网,如果长时间不重新登陆的话,网速会下降,所以想弄个能定时发送HTTP请求的东西。由于不想给路由器刷系统,也麻烦。就开始考虑使用局域网内的服务器,不过由于服务器没有Wi-Fi模块,也不想搞USB无线wifi网卡,就想着干脆用单......
  • angularJs 之 ng-options 的用法:
     angularjs之ng-optionng-options一般有以下用法:对于数组:labelforvalueinarrayselectaslabelforvalueinarraylabelgroupbygroupforvalueinarraylabeldisablewhendisableforvalueinarraylabelgroupbygroupforvalueinarraytrackbytrackexp......
  • 哪些网站可以申请免费的纯IP地址https证书
    申请免费纯IP地址HTTPS证书,您可以按照以下步骤进行:一、选择证书颁发机构(CA)目前,虽然一些大型云服务提供商(如阿里云、华为云、腾讯云等)已经取消了免费一年期SSL证书的供应,但仍有一些CA机构提供免费版本的IP地址HTTPS证书。二、在JoySSL申请免费证书访问JoySSL官网:https://www.jo......
  • 常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式
    目前的开发项目,准备明年的国产化,用了十年的自研系统借这个机会全部重写,订立更严格的规范,这里把返回格式及对应状态码记录一下。常见HTTP状态码及解释HTTP状态码用于表示客户端请求的响应状态,它们分为五类:2xx表示成功,3xx表示重定向,4xx表示客户端错误,5xx表示服务......
  • 2024/11/6日 日志 正则表达式,web与HTTP
    正则表达式点击查看代码--正则表达式--·概念:正则表达式定义了字符串组成的规则--·定义:--1.直接量:注意不要加引号--varreg=/^lw{6,12}$/:--2.创建RegExp对象--varreg=newRegExp("^lw{6,12}$");--·方法:--· test(str):判断指定字符串是否......
  • c# HttpClient,WebClient常用请求
     getWebClientwebClient=newWebClient();ServicePointManager.SecurityProtocol=(SecurityProtocolType)192|(SecurityProtocolType)768|(SecurityProtocolType)3072;//ServicePointManager.Expect100Continue=true;......
  • 合宙低功耗4G模组HTTP网络协议应用
    ​ 一、HTTP概述1.1简介HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的......
  • 【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/
    系统环境是ubuntu24.04创建daemon.json文件,设置国内加速地址。之前尝试使用了阿里,网易,百度的都不行。最后网上随便找了一粘进去,{"registry-mirrors":["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://do......
  • SpringMvc拦截器
     什么是拦截器?就是你在访问控制层去做业务前后都做一些事,你调用我之前我先看看你有没有这个权限拦截器和过滤器的区别:    归属不同:一个是Servlet技术一个是SpringMvc的技术    拦截的内容不同:过滤器Filter对所有访问进行加强,过滤器Interceptor仅仅针对Sp......