如何在Nest.js中间件中正确注入使用@nestjs/axios的HttpService
Nest.js中向中间件注入@nestjs/axios的HttpService的正确方案
报错的核心原因是你错误地手动将HttpService添加到了AppModule的providers列表中:HttpService本身依赖@nestjs/axios模块内部提供的AXIOS_INSTANCE_TOKEN令牌,手动注册provider不会自动注入这个依赖,因此触发了依赖解析失败的报错。
正确操作步骤如下:
- 第一步:确认已安装必需依赖
npm install @nestjs/axios axios
- 第二步:修改
AppModule配置,在imports字段引入HttpModule,删除providers中手动添加的HttpService
如需全局配置axios参数(比如超时时间、统一baseURL),可以使用HttpModule.register()方法传入配置项,无特殊需求直接引入即可。
正确的app.module.ts代码示例:
import { HttpModule } from '@nestjs/axios'; import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { CaptchaMiddleware } from './captcha.middleware'; @Module({ imports: [HttpModule], controllers: [AppController], providers: [AppService], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(CaptchaMiddleware) .forRoutes( { path: '/users', method: RequestMethod.POST } ); } }
- 第三步:
captcha.middleware.ts的代码不需要任何修改,HttpService会通过Nest的依赖注入系统自动实例化并注入到中间件中。
内容的提问来源于stack exchange,提问作者Obvious_Grapefruit
相关产品推荐
相关产品推荐

