我正在寻找有关NestJS框架的请求和应用程序生命周期的信息。具体来说:
在以下请求中,对于以下实现的路由,以下过程的执行顺序是什么:中间件,管道,防护,拦截器和任何其他可能的请求过程
NestJS应用程序中模块和提供程序的寿命是多少?它们会在请求,应用程序或其他内容的生命周期中持续存在吗?
除了OnModuleInit和OnModuleDestroy之外,还有生命周期挂钩吗?
是什么导致Modeule被破坏(并触发OnModuleDestroy事件)?
答案 0 :(得分:2)
在以下请求中,对于以下实现的路由,以下过程的执行顺序是什么:中间件,管道,防护,拦截器和任何其他可能的请求过程
常见顺序是:
NestJS应用程序中模块和提供程序的寿命是多少?它们会在请求,应用程序或其他内容的生命周期中持续存在吗?
它们在应用程序的生命周期中一直有效。关闭NestApplication或NestMicroservice时,模块将被销毁(请参阅close
中的INestApplication
方法)。
除了OnModuleInit和OnModuleDestroy之外,还有生命周期挂钩吗?
暂时没有。
感兴趣是什么导致Modeule被破坏(并触发OnModuleDestroy事件)?
答案 1 :(得分:0)
在以下请求中,对于以下实现的路由,以下过程的执行顺序是什么:中间件,管道,防护,拦截器和任何其他可能的请求过程
中间件->防护->拦截器(next.handle()
之前的代码)->管道->路由处理程序->拦截器(例如:next.handle().pipe( tap(() => changeResponse()) )
)->异常过滤器(如果引发异常)>
使用这三个函数,您可以在其构造函数中注入其他依赖项(例如服务,...)。
NestJS应用程序中模块和提供程序的寿命是多少?它们会在请求,应用程序或其他内容的生命周期中持续存在吗?
提供者可以具有以下任意范围:
SINGLETON
-提供程序的单个实例在整个应用程序中共享。实例生存期与应用程序生命周期直接相关。应用程序启动后,所有单例提供程序都将实例化。默认情况下使用Singleton范围。
REQUEST
-专门为每个传入请求创建提供者的新实例。请求完成处理后,实例将被垃圾回收。
TRANSIENT
-临时提供程序未在使用者之间共享。每个注入临时提供程序的使用者都将收到一个新的专用实例。
在大多数情况下,建议使用单例作用域。在使用者和请求之间共享提供程序意味着在应用程序启动期间,实例可以被缓存并且实例初始化仅发生一次。
示例
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class CatsService {}
除了OnModuleInit和OnModuleDestroy之外,还有生命周期挂钩吗?
OnApplicationBootstrap
-在应用程序完全启动并引导后调用
OnApplicationShutdown
-响应系统信号(当应用程序因SIGTERM而关闭时)。使用此挂钩可以正常关闭Nest应用程序。此功能通常与Kubernetes,Heroku或类似服务一起使用。
OnModuleInit
和OnApplicationBootstrap
钩子都允许您推迟应用程序初始化过程(返回Promise或将方法标记为异步)。
是什么导致模块被破坏(并触发OnModuleDestroy事件)?
通常来自Kubernetes,Heroku或类似服务的关闭信号。