设置中间件后,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 {}
我尝试遵循 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 {}