我有AuthModule带有AuthService,AuthController带有路由等的自定义模块,该模块可以正常工作,并且希望在多个项目之间作为一个软件包共享该模块。问题是如何扩展AuthService从此软件包中导入的内容,以及如何向其中注入其他服务?
更多细节
AuthService将要放入程序包的自定义变量注入到类中UserService,该类默认情况下从数据库中获取一些User数据并将其返回给客户端。我需要注入AuthService另一个ProfileService数据库中的User额外数据,例如从应用程序中获取。目的是合并User主数据和User额外数据,并将这堆数据返回给客户端
我不认为这里真的需要动态模块。
事实上,只需要从您的 AuthModule 导出您想要注入到由 NestJs 管理的其他实体中的服务,并将 AuthModule 导入到您希望其他实体注入您的 AuthService 的模块中。
import { Module } from '@nestjs/common'
import { AuthService } from './AuthService'
@Module({
providers: [
AuthService,
// ... others
],
exports: [
AuthService
]
})
export class CommonModule {}
Run Code Online (Sandbox Code Playgroud)
然后在您的依赖类(假设是另一个控制器,但可以是 GraphQL 解析器、拦截器或其他任何东西)中,声明对 AuthService 的依赖关系。
import { AuthService } from '../auth/AuthService'
import { Dependencies } from '@nestjs/common'
@Dependencies(AuthService)
export class DependentController {
constructor (authService) {
this.authService = authService
}
}
Run Code Online (Sandbox Code Playgroud)
最后,为了使 AuthService 对依赖控制器可用,必须将其导入到提供控制器的同一模块中。
import { Module } from '@nestjs/common'
import { CommonModule } from '../auth/CommonModule'
import { DependentController } from './controller/DependentController'
@Module({
imports: [
CommonModule,
// ...others
],
providers: [
DependentController,
// ...others
]
})
export class ControllerModule {}
Run Code Online (Sandbox Code Playgroud)
我知道语法可以更短,并且无需在打字稿中使用依赖关系装饰器,但是问题的核心是从提供的模块中导出共享服务,然后将该模块导入到需要它的模块中的其他类中。
这是创建动态模块的用例之一。
import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';
@Module({
providers: [Connection],
})
export class DatabaseModule {
static forRoot(entities = [], options?): DynamicModule {
const providers = createDatabaseProviders(options, entities);
return {
module: DatabaseModule,
providers: providers,
exports: providers,
};
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,了解如何providers(动态)给予结果模块。
您的包应该遵循相同的模式:公开一个允许构建 的静态方法DynamicModule,以便您可以根据需要解析其他服务(内部或外部)(构建您自己的 数组providers)。
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |