W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Axios 是一個(gè)功能豐富的 HTTP 客戶端包,被廣泛使用。 Nest 封裝了 Axios 并通過(guò)內(nèi)置的 HttpModule 將其公開(kāi)。 HttpModule 導(dǎo)出 HttpService 類,該類公開(kāi)基于 Axios 的方法來(lái)執(zhí)行 HTTP 請(qǐng)求。 該庫(kù)還將生成的 HTTP 響應(yīng)轉(zhuǎn)換為 Observables。
我們還可以直接使用任何通用的 Node.js HTTP 客戶端庫(kù),包括 got 或 undici。
要開(kāi)始使用它,我們首先安裝所需的依賴項(xiàng)。
$ npm i --save @nestjs/axios
安裝過(guò)程完成后,要使用 HttpService,首先導(dǎo)入 HttpModule。
@Module({
imports: [HttpModule],
providers: [CatsService],
})
export class CatsModule {}
接下來(lái),使用普通的構(gòu)造函數(shù)注入來(lái)注入 HttpService。
HttpModule 和 HttpService 是從 @nestjs/axios 包中導(dǎo)入的。
@Injectable()
export class CatsService {
constructor(private httpService: HttpService) {}
findAll(): Observable<AxiosResponse<Cat[]>> {
return this.httpService.get('http://localhost:3000/cats');
}
}
axiosResponse 是從 axios 包中導(dǎo)出的接口($ npm i axios)。
所有 HttpService 方法都返回一個(gè)包裝在 Observable 對(duì)象中的 AxiosResponse。
Axios 可以配置多種選項(xiàng)來(lái)自定義 HttpService 的行為。 要配置底層 Axios 實(shí)例,請(qǐng)?jiān)趯?dǎo)入時(shí)將可選選項(xiàng)對(duì)象傳遞給 HttpModule 的 register() 方法。 這個(gè)選項(xiàng)對(duì)象將直接傳遞給底層的 Axios 構(gòu)造函數(shù)。
@Module({
imports: [
HttpModule.register({
timeout: 5000,
maxRedirects: 5,
}),
],
providers: [CatsService],
})
export class CatsModule {}
當(dāng)我們需要異步而不是靜態(tài)地傳遞模塊選項(xiàng)時(shí),請(qǐng)使用 registerAsync() 方法。 與大多數(shù)動(dòng)態(tài)模塊一樣,Nest 提供了幾種處理異步配置的技術(shù)。
一種技術(shù)是使用工廠函數(shù):
HttpModule.registerAsync({
useFactory: () => ({
timeout: 5000,
maxRedirects: 5,
}),
});
和其他工廠提供者一樣,我們的工廠函數(shù)可以是異步的,可以通過(guò) inject 注入依賴。
HttpModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
timeout: configService.get('HTTP_TIMEOUT'),
maxRedirects: configService.get('HTTP_MAX_REDIRECTS'),
}),
inject: [ConfigService],
});
或者,我們可以使用類而不是工廠來(lái)配置 HttpModule,如下所示。
HttpModule.registerAsync({
useClass: HttpConfigService,
});
上面的構(gòu)造在 HttpModule 中實(shí)例化了 HttpConfigService,使用它來(lái)創(chuàng)建一個(gè)選項(xiàng)對(duì)象。 請(qǐng)注意,在此示例中,HttpConfigService 必須實(shí)現(xiàn) HttpModuleOptionsFactory 接口,如下所示。 HttpModule 將調(diào)用所提供類的實(shí)例化對(duì)象上的 createHttpOptions() 方法。
@Injectable()
class HttpConfigService implements HttpModuleOptionsFactory {
createHttpOptions(): HttpModuleOptions {
return {
timeout: 5000,
maxRedirects: 5,
};
}
}
如果要重用現(xiàn)有選項(xiàng)提供程序而不是在 HttpModule 中創(chuàng)建私有副本,請(qǐng)使用 useExisting 語(yǔ)法。
HttpModule.registerAsync({
imports: [ConfigModule],
useExisting: HttpConfigService,
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: