据我了解,当应用程序启动时,nestjs会创建所有服务,也许我使用的是错误的,有没有一种方法可以配置NestJs根据请求创建服务?像每次执行请求一样,都会重新创建用于该请求的某些服务?
答案 0 :(得分:1)
这将在nest.js 6.0中实现,请参见此pull request。
正如卡米尔(Kamil)在此issue中写道:
一旦异步钩子功能(在节点10中仍处于试验状态)为 稳定,我们将考虑为 请求范围的实例。
因此,目前看来这还不可能。与默认的单例行为相比,您只能将整个模块标记为SingleScope
。使用SingleScope
,将为每次导入创建模块的新实例。
答案 1 :(得分:1)
随着nest.js 6.0的发布,添加了injection scopes。这样,您可以为提供商选择以下三个范围之一:
将其添加到@Injectable()
装饰器中:
@Injectable({ scope: Scope.REQUEST })
export class UsersService {}
或在模块定义中为自定义提供程序设置它:
{
provide: 'CACHE_MANAGER',
useClass: CacheManager,
scope: Scope.TRANSIENT,
}
答案 2 :(得分:0)
我想使用di来标记整个端点以在 交易而不必为 端点。除了使用di之外,还有一个软件包可以帮助我们 根据称为
cls-hooked
的回调链创建资源 基于金·克恩(Kim Kern)在回应中async-hooks
使用的 我可以在调用enpoint时启动事务, 设置完成后停止它,因为我将typeorm
用作数据库orm 能够使用this solution