首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在nestjs/ axios中设置全局(模块级)拦截器

在nestjs/ axios中设置全局(模块级)拦截器
EN

Stack Overflow用户
提问于 2022-05-17 07:13:24
回答 1查看 1.5K关注 0票数 0

如何添加用于记录传出请求的拦截器?我知道我可以将它添加到HttpService的每个实例,如下所示:

代码语言:javascript
运行
复制
this.httpService.axiosRef.interceptors.request.use((config) => ...)

但是我只想添加一次,这就是为什么我要问是否有一种在模块级别添加它的方法--我看到了一个向模块添加配置的选项,如下所示:

代码语言:javascript
运行
复制
imports: [HttpModule.register({...})]

有人知道如何以这种方式配置拦截器?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-06-08 10:03:50

作为一个变体,您可以使用这个示例编写您自己的HttpModule,这将使用Axios HttpSerive。要使用register \ registerAsync,您需要从Axios HttpModule (在示例AxiosHttpModule上)对模块进行extends

代码语言:javascript
运行
复制
import { HttpModule as AxiosHttpModule, HttpService } from '@nestjs/axios';
import { Global, Inject, Module, OnModuleInit } from '@nestjs/common';
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';

import { Logger } from '@app/common/Logger';
import {
  createReqInterceptor,
  createRespFailInterceptor,
  createRespSuccessInterceptor,
} from '@app/common/http/http.interceptors';

@Global()
@Module({
  imports: [AxiosHttpModule],
  exports: [AxiosHttpModule],
})
export class HttpModule extends AxiosHttpModule implements OnModuleInit {
  constructor(
    private readonly httpService: HttpService,
    @Inject(WINSTON_MODULE_NEST_PROVIDER) private readonly logger: Logger,
  ) {
    super();
  }

  public onModuleInit(): any {
    const axios = this.httpService.axiosRef;

    axios.interceptors.request.use(function (config: AxiosRequestConfig) {
     //... some logic
    });
    axios.interceptors.response.use(
      function (response: AxiosResponse) {
       //... some logic
      },
      function (err: AxiosError) {
        //... some logic
      },
    );
  }
}

TLTR:另外,您需要注意的是,HttpModule.register()每次都会创建一个新实例--因此在AppModule启动时不能使某些逻辑全局化--这是在configure上使用中间件的最简单方法

代码语言:javascript
运行
复制
configure(consumer: MiddlewareConsumer): void {
    consumer.apply(RequestsMiddleware).forRoutes('*');
  }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72269617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档