当前位置:首页 > Web开发 > 正文

所以直接导入到根模块去

2024-03-31 Web开发

前端应用都需要通过 HTTP 协议与后端处事器通讯,@angular/common/http 中的 HttpClient 类为 Angular 应用措施供给的 API 来实现 HTTP 客户端成果。它基于浏览器供给的 XMLHttpRequest 接口。 HttpClient 带来的其它长处包孕:可测试性、强类型的请求和响应东西、倡议请求与接收响应时的拦截器撑持,以及更好的、基于可不雅察看(Observable)东西的 API 以及流式错误措置惩罚惩罚机制。

1.使用http处事

在根模块AppModule导入HttpClientModule。因为大大都应用中,多处多都要使用到http处事,所以直接导入到根模块去。

import { NgModule } from @angular/core; import { BrowserModule } from @angular/platform-browser; import { HttpClientModule } from @angular/common/http; @NgModule({ imports: [ BrowserModule, HttpClientModule, ], declarations: [ AppComponent, ], bootstrap: [ AppComponent ] }) export class AppModule {}

然后就可以在处事中使用http处事了

import { Injectable } from @angular/core; import { HttpClient } from @angular/common/http; @Injectable() export class UserService { constructor(private http: HttpClient) { }

getUsers():Observable<Array<userInfo>>{
return this.http.get<Array<userInfo>>(url);
} }

2.封装httpService

   凡是一个应用我们不会直接使用HttpClient,数据的访谒没有这么简单,我们可能会对header 有统一的添加,错误措置惩罚惩罚,数据措置惩罚惩罚,网络异常等情况措置惩罚惩罚。如果不封装一个处事那么我们直接使用HttpClient,会呈现大量的反复,冗余杂乱的代码,无法统一标准化,在恒久的开发以及测试中会变得麻烦和增加维护本钱。这就是为什么在一个应用措施中,无论项目多小,我们都要把数据访谒封装一个单独的处事中去的原因。

这个是HttpClient.post 要领,我们可以看到他的返回类型是某个值的 RxJS Observable。

技术图片

默认情况下把响应体当做无类型的 JSON 东西进行返回,如果指定了模版类型Array<userInfo>,他就会返回一个此类型的东西回来,但是具体还是得取决于数据接口返回来的数据。

参考上面的UserService处事里的getUsers。下面是某个组件挪用。

users: Array<User>; showUser() { this.userService.getUsers() .subscribe((data:Array<User>) => this.users = { ...data }); }

返回数据功效统一措置惩罚惩罚

凡是我们API返回来的数据布局是统一的规范化功效,有利于项目前后端疏散,团队合作开发。

export class ResultData<T> { success: boolean; msg?: string; data?: T; errorcode?: string; timestamp?: number; }

例子不才面??

错误措置惩罚惩罚

当你倡议一个网络请求,你不知道处事器会给你返回什么,你不知道请求是否能达随处事器,会不会呈现网络堵塞,处事器错误等等等的问题,这时候就需要要捕获错误,并对错误进行措置惩罚惩罚。使用 RxJS 的 catchError() 操纵符来成立对 Observable 功效的措置惩罚惩罚管道(pipe)

//post 请求
public post(url: string, data = {}): Observable<any> { return this.http.post(url, data, httpOptions).pipe( map(this.extractData), catchError(this.handleError)//获取了由 HttpClient 要领返回的 Observable,并把它们通过管道传给错误措置惩罚惩罚器 ); }
// 返回功效
private extractData(res: Response) { return res as ResultData<any>; }
// 错误动静类
private handleError(error: HttpErrorResponse) { if (error.error instanceof ErrorEvent) { console.error(An error occurred:, error.error.message); } else { console.error( `Backend returned code ${error.status}, ` + `body was: ${error.error}` ); } return throwError(Something bad happened; please try again later.); }

retry()

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31002.html