javascript - 请求范围的服务

标签 javascript node.js typescript nestjs

据我了解,现在 nestjs 在应用程序启动时创建所有服务,也许我用错了有没有办法配置 NestJs 以根据请求创建服务?就像每次完成请求时都会重新创建在该请求上使用的一些服务?

最佳答案

随着 nest.js 6.0 的发布,injection scopes添加。有了这个,您可以为您的提供商选择以下三个范围之一:

  • SINGLETON:默认行为。您的提供商的一个实例用于整个应用程序
  • TRANSIENT:为注入(inject)它的每个提供者创建一个提供者的专用实例。
  • REQUEST:对于每个请求,都会创建一个新的提供者。

⚠️ 注意:注入(inject)作用域会在你的依赖链中冒泡。 ⚠️

示例:如果 UsersController(单例范围)注入(inject) UsersService(单例范围)注入(inject) OtherService(请求范围),则两者 UsersControllerUsersService 将自动成为请求范围的。

用法

要么将它添加到 @Injectable() 装饰器中:

@Injectable({ scope: Scope.REQUEST })
export class UsersService {}

或者在您的模块定义中为自定义提供者设置它:

{
  provide: 'CACHE_MANAGER',
  useClass: CacheManager,
  scope: Scope.TRANSIENT,
}

关于javascript - 请求范围的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450075/

相关文章:

angularjs - 带有后端 api 的 webpack-dev-server

AngularJS 代码不适用于 NodeJS

javascript - typescript 错误 : Cannot redeclare block-scoped variable 'fetch'

javascript - 如何根据对象数组中的值过滤键

javascript - 为什么 TypeScript 中的类允许鸭子类型(duck typing)

javascript - 从 setTimeout 返回一个值

javascript - 如何使元素刷新后不可见

javascript - Angular2 - 具有 ng 风格的 SVG

javascript - 具有相同表单主体的 Jade 条件输出不同/条件表单属性

javascript - Mat-select by formarray 不显示所选值和选项 - 响应式(Reactive)表单 Angular