📜  nestjs AXIOS_INSTANCE_TOKEN - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:09.623000             🧑  作者: Mango

NestJS Axios Instance Token

在 NestJS 中,我们可以使用 Axios 来进行 HTTP 请求。而在某些情况下,我们需要使用多个不同的 axios 实例,这时候就可以使用 NestJS 中的 Axios Instance Token 来实现。

Axios Instance Token 是 NestJS 中提供的一种依赖注入的方式,可以方便地在服务或控制器中使用已经配置好的 axios 实例。

获取 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 的依赖注入。

使用 Axios 实例

在服务或控制器中,我们可以通过 @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 请求。