📅  最后修改于: 2023-12-03 15:03:09.623000             🧑  作者: Mango
在 NestJS 中,我们可以使用 Axios 来进行 HTTP 请求。而在某些情况下,我们需要使用多个不同的 axios 实例,这时候就可以使用 NestJS 中的 Axios Instance Token 来实现。
Axios Instance Token 是 NestJS 中提供的一种依赖注入的方式,可以方便地在服务或控制器中使用已经配置好的 axios 实例。
我们可以通过 axios.create()
方法创建一个 axios 实例。在 NestJS 中,我们可以使用 axiosProvider
来创建一个实例并将其注册到模块中。
import axios from 'axios';
import { Module } from '@nestjs/common';
import { AXIOS_INSTANCE_TOKEN } from './constants';
@Module({
providers: [
{
provide: AXIOS_INSTANCE_TOKEN,
useValue: axios.create({
baseURL: 'https://api.example.com',
timeout: 5000,
}),
},
],
})
export class AppModule {}
在上述代码中,我们使用 axios.create()
方法创建了一个 axios 实例,并将其作为 useValue
传递给 AXIOS_INSTANCE_TOKEN
的依赖注入。
在服务或控制器中,我们可以通过 @Inject()
装饰器获取已经创建好的 axios 实例,并使用其方法进行 HTTP 请求。
import { Controller, Get, Inject } from '@nestjs/common';
import { AXIOS_INSTANCE_TOKEN } from './constants';
import axios, { AxiosInstance } from 'axios';
@Controller()
export class AppController {
constructor(
@Inject(AXIOS_INSTANCE_TOKEN)
private readonly axiosInstance: AxiosInstance,
) {}
@Get()
async get(): Promise<any> {
const response = await this.axiosInstance.get('/users');
return response.data;
}
}
在上述代码中,我们使用 @Inject()
装饰器获取了之前注册到模块中的 axios 实例,并将其作为 private 属性绑定到控制器中。随后在 get 方法中,我们就可以通过 this.axiosInstance.get()
方法进行 HTTP 请求了。
Axios Instance Token 是 NestJS 中提供的一种依赖注入方式,可以方便地在服务或控制器中使用已经配置好的 axios 实例。通过 @Inject()
装饰器获取实例后,我们可以方便地使用其方法进行 HTTP 请求。