Nestjs 中的对象生命周期在 类 之间

objects lifecycle in Nestjs between classes

我想了解 Nestjs 如何处理对象的持久化。在 Nodejs 中,您可以声明一个对象,它将在应用程序的生命周期内持续存在。然而,Nestjs 由类似于 Angular 的“类” 的协作组成。尽管 Angular 具有可以在应用程序的生命周期内保留对象的 BehaviourSubject,但我不确定如何在 Nestjs 中使用 Redis 或其他一些内存存储来执行此操作。例如,如果我有一个 controllerA 调用一个 serviceA(这个服务有一个对象,其值为:

  Aobject=[]=[];
  Aobject.push({"test"})).

如果我有另一个使用 DI 访问 serviceA 的 controllerB,Aobject 的值是什么?有人可以解释 Nestjs 如何处理 类 之间 Aobject 的生命周期吗?我是否使用内存存储来实现这一点?

编辑:根据第一个答案,我正在编辑问题。 我正在使用默认范围,因为我希望所有访问者都通过 serviceA 修改 Aobject。似乎正在发生的事情是,当 serviceA 被 controllerB 调用时,Aobject 为 null ...一个空数组,就像它在初始化时一样。这非常令人费解,因为我希望它具有 serviceA 设置的最后一个值,无论是谁发起调用。

这种情况符合我的预期:

cronService 调用 serviceC....serviceC 调用 serviceA 将 Aobject 设置为 ['TEST'] 然后 returns 到 serviceC... 然后 returns 到 cronService... cronService 然后调用 serviceA 并检查 Aobject 的值...该值是预期的 'TEST'...但是当 serviceB 调用 serviceA 时,Aobject 的值为空[]。 范围是否由 cronService 控制,当我们更改为 serviceB 时,它是一个新范围.. Aobject 的新实例??

这取决于 serviceA 使用什么 injection scope。如果不指定注入范围,将使用 DEFAULT 范围,这意味着 controllerAcontrollerB 将共享 serviceA 的单例实例。假设serviceA有一个对象Aobject,两个控制器都会修改同一个对象,如果修改动作是通过serviceA.

发生的

如果 serviceA 使用 REQUEST 作用域,将针对每个用户请求创建一个不同的 serviceA 实例,并在请求完成时对它们进行垃圾回收。

第三个注入范围是TRANSIENT范围。在这种情况下,每个控制器都会有一个不同的 serviceA 实例,但这些实例是在启动时创建的,不会在每次请求后终止。