Nestjs 如何将服务注入导入的服务中

Nestjs 如何将服务注入导入的服务中,nestjs,Nestjs,我有自定义模块AuthModule和AuthService,AuthController和路由等等,这些模块工作正常,并且希望在多个项目之间作为一个包共享此模块。问题是如何从这个包中扩展导入的AuthService,以及如何向其中注入额外的服务 更多详细信息 我想将自定义的AuthService放入包中,然后将其注入类UserService,默认情况下,该类从数据库获取一些User数据并将其返回客户端。我需要向另一个AuthService中注入,例如,从应用程序中获取的ProfileServic

我有自定义模块
AuthModule
AuthService
AuthController
和路由等等,这些模块工作正常,并且希望在多个项目之间作为一个包共享此模块。问题是如何从这个包中扩展导入的
AuthService
,以及如何向其中注入额外的服务

更多详细信息


我想将自定义的
AuthService
放入包中,然后将其注入类
UserService
,默认情况下,该类从数据库获取一些
User
数据并将其返回客户端。我需要向另一个
AuthService
中注入,例如,从应用程序中获取的
ProfileService
,这些数据来自数据库
User
额外数据。其目的是合并
用户
主数据和
用户
额外数据,并将这组数据返回给客户机

这是为其创建的用例之一

从'@nestjs/common'导入{Module,DynamicModule};
从“./database.providers”导入{createDatabaseProviders};
从“./Connection.provider”导入{Connection};
@模块({
提供者:[连接],
})
导出类数据库模块{
静态forRoot(实体=[],选项?):动态模块{
const providers=createDatabaseProviders(选项、实体);
返回{
模块:数据库模块,
提供者:提供者,
出口:供应商,
};
}
}
在本例中,请参见如何(动态)向结果模块提供
提供程序


您的包应该遵循相同的模式:公开一个静态方法,该方法允许构建一个
动态模块,这样您就可以根据需要解析其他服务(内部或外部)(构建您自己的
提供者数组)。

我不认为这里真的需要动态模块

实际上,只需要从AuthModule导出要注入到由NestJs管理的其他实体中的服务,并在希望其他实体注入到AuthService的模块中导入AuthModule

从'@nestjs/common'导入{Module}
从“/AuthService”导入{AuthService}
@模块({
供应商:[
AuthService,
//……其他
],
出口:[
授权服务
]
})
导出类CommonModule{}
然后在您的依赖类中(假设是另一个控制器,但可以是任何类似于GraphQL解析器、拦截器或其他的东西),声明对AuthService的依赖

从“../auth/AuthService”导入{AuthService}
从“@nestjs/common”导入{依赖项}
@依赖项(AuthService)
导出类从属控制器{
构造函数(authService){
this.authService=authService
}
}
最后,为了使AuthService可用于从属控制器,必须将其导入到提供控制器的同一模块中

从'@nestjs/common'导入{Module}
从“../auth/CommonModule”导入{CommonModule}
从“./controller/DependentController”导入{DependentController}
@模块({
进口:[
公共模块,
//……其他
],
供应商:[
从属控制器,
//……其他
]
})
导出类控制器模块{}

我知道语法可能会更短,并且在typescript中不使用Dependencies decorator,但是问题的核心是从提供的模块导出共享服务,然后将该模块导入到需要它的模块中。

更多上下文。也许,是代码的一部分。什么类型的Auth:JWT或Bearer?忘了澄清AuthModule是定制的,在本例中类型并不重要,因为它是抽象的。主要问题是如何将一些应用程序服务注入从Package导入的另一个服务在我的情况下,我必须将所有模块封装到函数中,然后通过参数传递我的服务。类似这样的内容:`//app.js从'mypackage'导入{createAuthModule};从“../../modules/profile”const AuthModule=createAuthModule(ProfileService);`但这并不是一个优雅的解决方案我在考虑一些更接近
YourModule.createdynamic(…)
的解决方案,但你将无法接近任何比
DynamicModule
更优雅的解决方案。首先,您的方法可能是无效的。模块应该是自给自足的和/或嵌入自己的依赖项。如果您想允许它是开放式的,那么您必须接受它要求您提供正确的依赖项。祝你好运,使用Nest玩得开心!