【问题标题】:Nest can't resolve dependencies of the CommonModuleNest 无法解析 CommonModule 的依赖关系
【发布时间】:2020-12-14 04:11:28
【问题描述】:

我是 NEST.js 世界的新手,我正在尝试创建简单的中间件。 首先,我用这个命令创建了一个中间件:

nest g middleware common/middleware/logging

在我添加我的代码之后

import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggingMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.time('Request-response time');
    console.log('Hi from middleware!');

    res.on('finish', () => console.timeEnd('Request-response time'));
    next();
  }
}

最后,我添加了中间件

import { Module, MiddlewareConsumer } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { ApiKeyGuard } from './guards/api-key.guard';
import { ConfigModule } from '@nestjs/config';
import { LoggingMiddleware } from './middleware/logging.middleware';

@Module({
  imports: [
    ConfigModule
  ],
  providers: [
    {
      provide: APP_GUARD,
      useClass: ApiKeyGuard
    }

  ]
})
export class CommonModule {
  constructor(consumer: MiddlewareConsumer) {
    consumer.apply(LoggingMiddleware).forRoutes('*')
  }
}

但是当我尝试运行它时:

Nest 无法解析 CommonModule (?) 的依赖关系。请做出来 确保索引 [0] 处的参数 Object 在 CommonModule 上下文。

可能的解决方案:

  • 如果 Object 是提供者,它是当前 CommonModule 的一部分吗?
  • 如果 Object 是从单独的 @Module 导出的,那么该模块是否会导入 CommonModule 中? @模块({ 导入:[ /* 包含对象的模块 */ ] }) +2ms 错误:Nest 无法解析 CommonModule (?) 的依赖项。请做出来 确保索引 [0] 处的参数 Object 在 CommonModule 上下文。

可能的解决方案:

  • 如果 Object 是提供者,它是当前 CommonModule 的一部分吗?
  • 如果 Object 是从单独的 @Module 导出的,那么该模块是否会导入 CommonModule 中? @模块({ 导入:[ /* 包含对象的模块 */ ] })

你能帮帮我吗?

【问题讨论】:

    标签: javascript nestjs


    【解决方案1】:

    MiddlewareConsumer 不是constructor 的一部分。相反,您的模块类应该实现 NestModule 并且应该有一个 configure 方法,该方法将 consumer: MiddlewareConsumer 作为第一个也是唯一的参数。

    @Module({
      imports: [
        ConfigModule
      ],
      providers: [
        {
          provide: APP_GUARD,
          useClass: ApiKeyGuard
        }
    
      ]
    })
    export class CommonModule implmenets NestModule {
      configure(consumer: MidlewareConsumer) {
        consumer.apply(LoggingMiddleware).forRoutes('*')
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2018-11-21
      • 2020-03-12
      • 2020-07-03
      • 2021-04-28
      • 2020-03-07
      • 2019-12-15
      • 2020-12-13
      • 2019-12-09
      相关资源
      最近更新 更多