Nest 无法解析应用模块的依赖关系 (?)设置中间件后



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

我的终端出现错误

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:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:230:19)
at Injector.resolveComponentInstance (c:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:184:33)
at resolveParam (c:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:106:38)
at async Promise.all (index 0)
at Injector.resolveConstructorParams (c:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:121:27)
at Injector.loadInstance (c:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:52:9)
at Injector.loadProvider (c:codelabnestlabnode_modules@nestjscoreinjectorinjector.js:74:9)
at async Promise.all (index 0)
at InstanceLoader.createInstancesOfProviders (c:codelabnestlabnode_modules@nestjscoreinjectorinstance-loader.js:44:9)
at c:codelabnestlabnode_modules@nestjscoreinjectorinstance-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();
}
}

应用程序模块.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接口(进行注入

如果您阅读有关中间件使用者的文档,您会注意到
consumer: MiddlewareConsumer参数应在configure方法中使用,而不是在constructor中使用

此外,这样做可以改进类型检查:

class AppModule implements NestModule {}

最新更新