设置中间件后,Nest 无法解析 AppModule 的依赖项(?)

Nest can't resolve dependencies of the AppModule (?) After set a middleware

我尝试遵循 nestjs 的文档 middleware,但在添加和设置中间件后我的 nest 应用程序出现问题。 我已经从 nestjs 本身看到了关于相同 common error 的常见问题解答,但仍然对解决这个问题感到困惑。

我的终端出错

Error: Nest can't resolve dependencies of the AppModule (?). Please make sure that the argument Object at index [0] is available in the AppModule context.

Potential solutions:
- If Object is a provider, is it part of the current AppModule?
- If Object is exported from a separate @Module, is that module imported within AppModule?
  @Module({
    imports: [ /* the Module containing Object */ ]
  })

    at Injector.lookupComponentInParentModules (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:230:19)
    at Injector.resolveComponentInstance (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:184:33)
    at resolveParam (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:106:38)
    at async Promise.all (index 0)
    at Injector.resolveConstructorParams (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:121:27)
    at Injector.loadInstance (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:52:9)
    at Injector.loadProvider (c:\codelab\nestlab\node_modules\@nestjs\core\injector\injector.js:74:9)
    at async Promise.all (index 0)
    at InstanceLoader.createInstancesOfProviders (c:\codelab\nestlab\node_modules\@nestjs\core\injector\instance-loader.js:44:9)
    at c:\codelab\nestlab\node_modules\@nestjs\core\injector\instance-loader.js:29:13

问题是当我像这样在我的 AppModule 构造函数上设置 AuthMiddleware 时

  constructor(consumer: MiddlewareConsumer) {
    consumer
      .apply(AuthMiddleware)
      .forRoutes({
        path: '*',
        method: RequestMethod.GET,
      });
  }

这是我的相关代码。

AuthMiddleware.ts

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

@Injectable()
export class AuthMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('AuthMiddleware passed');
    next();
  }
}

app.module.ts

import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthMiddleware } from './auth.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {
  constructor(consumer: MiddlewareConsumer) {
    consumer
      .apply(AuthMiddleware)
      .forRoutes({
        path: '*',
        method: RequestMethod.GET,
      });
  }
}

感谢您的关注和帮助。

Object is provider 表示您正在使用接口(MiddlewareConsumer 接口)注入

如果你read the docs on middleware consumer,你会注意到
consumer: MiddlewareConsumer 参数 应该在 configure 方法中使用,而不是在 constructor

中使用

另外,这样做是为了改进类型检查:

class AppModule implements NestModule {}