Bird
Raised Fist0
NestJSframework~10 mins

Application lifecycle in NestJS - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Application lifecycle
Start Application
↓
Module Initialization
↓
Dependency Injection Setup
↓
OnModuleInit Hook
↓
Application Ready
↓
Handle Requests
↓
OnApplicationShutdown Hook
↓
Cleanup Resources
↓
Application Stops
This flow shows how a NestJS app starts, initializes modules, sets up dependencies, runs lifecycle hooks, handles requests, and cleans up on shutdown.
Execution Sample
NestJS
import { Injectable, OnModuleInit, OnApplicationShutdown } from '@nestjs/common';

@Injectable()
export class AppService implements OnModuleInit, OnApplicationShutdown {
  onModuleInit() { console.log('Module initialized'); }
  onApplicationShutdown() { console.log('Application shutting down'); }
}
This code defines a service that logs messages when the module initializes and when the app shuts down.
Execution Table
StepActionHook CalledConsole OutputState
1Start ApplicationNoneApp starting
2Initialize ModulesNoneModules initialized
3Setup Dependency InjectionNoneDependencies injected
4Call onModuleInitonModuleInitModule initializedModule ready
5Application ReadyNoneApp ready to handle requests
6Handle RequestsNoneServing requests
7Trigger ShutdownonApplicationShutdownApplication shutting downCleaning up
8Cleanup ResourcesNoneResources cleaned
9Stop ApplicationNoneApp stopped
💡 Application stops after cleanup and shutdown hooks complete.
Variable Tracker
VariableStartAfter Step 4After Step 7Final
appStatestartingmoduleReadyshuttingDownstopped
consoleOutputModule initializedApplication shutting downApplication shutting down
Key Moments - 2 Insights
Why does onModuleInit run before the app is ready to handle requests?
Because onModuleInit is called right after modules and dependencies are set up (see step 4 in execution_table), ensuring the module is ready before serving requests.
When exactly does onApplicationShutdown run?
It runs during the shutdown process (step 7), before the app fully stops, to allow cleanup of resources.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the appState after step 4?
AmoduleReady
Bstarting
CshuttingDown
Dstopped
💡 Hint
Check variable_tracker row for appState after step 4.
At which step does the application start handling requests?
AStep 3
BStep 5
CStep 7
DStep 9
💡 Hint
See execution_table row where 'Application Ready' and 'Serving requests' state appear.
If onModuleInit was removed, what would change in the execution flow?
AModule initialization would be skipped
BApplication would not start
CNo console output at step 4
DShutdown hook would not run
💡 Hint
Look at consoleOutput in execution_table at step 4.
Concept Snapshot
NestJS Application Lifecycle:
- Start app -> initialize modules
- Setup dependencies
- onModuleInit runs after DI setup
- App ready to handle requests
- onApplicationShutdown runs on shutdown
- Cleanup and stop app
Use lifecycle hooks to run code at these stages.
Full Transcript
The NestJS application lifecycle begins when the app starts. Modules initialize and dependencies are injected. Then, the onModuleInit hook runs to signal module readiness. After that, the app is ready to handle requests. When the app shuts down, the onApplicationShutdown hook runs to clean up resources before the app stops. This lifecycle helps organize code to run at the right time during app start and stop.

Practice

(1/5)
1. Which lifecycle hook in NestJS is used to run code right after a module has been initialized?
easy
A. OnModuleInit
B. OnApplicationBootstrap
C. OnApplicationShutdown
D. OnModuleDestroy

Solution

  1. Step 1: Understand module initialization timing

    The OnModuleInit hook runs immediately after the module's dependencies are resolved and the module is set up.
  2. Step 2: Match the hook to the description

    OnApplicationBootstrap runs after the entire app starts, OnApplicationShutdown runs before app stops, and OnModuleDestroy runs before module is destroyed.
  3. Final Answer:

    OnModuleInit -> Option A
  4. Quick Check:

    Run code after module setup = OnModuleInit [OK]
Hint: Module init code runs in OnModuleInit hook [OK]
Common Mistakes:
  • Confusing OnModuleInit with OnApplicationBootstrap
  • Using OnApplicationShutdown for startup code
  • Thinking OnModuleDestroy runs after module init
2. Which of the following is the correct way to implement the OnApplicationShutdown lifecycle hook in a NestJS service?
easy
A. export class MyService implements OnApplicationShutdown { onApplicationShutdown(signal?: string) { /* code */ } }
B. export class MyService implements OnModuleInit { onApplicationShutdown() { /* code */ } }
C. export class MyService implements OnApplicationBootstrap { onApplicationShutdown(signal: number) { /* code */ } }
D. export class MyService implements OnModuleDestroy { onApplicationShutdown(signal?: string) { /* code */ } }

Solution

  1. Step 1: Identify correct interface and method signature

    The OnApplicationShutdown interface requires implementing onApplicationShutdown(signal?: string) method.
  2. Step 2: Check method name and parameter types

    export class MyService implements OnApplicationShutdown { onApplicationShutdown(signal?: string) { /* code */ } } correctly implements OnApplicationShutdown with optional string parameter signal. Others mismatch interface or method name.
  3. Final Answer:

    export class MyService implements OnApplicationShutdown { onApplicationShutdown(signal?: string) { /* code */ } } -> Option A
  4. Quick Check:

    Correct interface and method signature = export class MyService implements OnApplicationShutdown { onApplicationShutdown(signal?: string) { /* code */ } } [OK]
Hint: Match interface name with method signature exactly [OK]
Common Mistakes:
  • Implementing wrong interface for shutdown hook
  • Using wrong method name or parameters
  • Confusing OnApplicationShutdown with OnModuleInit
3. Consider this NestJS service code snippet:
export class AppService implements OnModuleInit, OnApplicationShutdown {
  onModuleInit() {
    console.log('Module initialized');
  }
  onApplicationShutdown(signal?: string) {
    console.log('App shutting down:', signal);
  }
}

What will be printed if the application starts and then receives a SIGINT signal to stop?
medium
A. Module initialized only
B. App shutting down: SIGINT\nModule initialized
C. App shutting down: SIGINT only
D. Module initialized\nApp shutting down: SIGINT

Solution

  1. Step 1: Understand lifecycle hook order on start

    onModuleInit runs after module setup, so 'Module initialized' prints on app start.
  2. Step 2: Understand shutdown hook on SIGINT

    When SIGINT signal is received, onApplicationShutdown runs and logs 'App shutting down: SIGINT'.
  3. Final Answer:

    Module initialized\nApp shutting down: SIGINT -> Option D
  4. Quick Check:

    Start logs init, stop logs shutdown with signal [OK]
Hint: Startup logs OnModuleInit, shutdown logs OnApplicationShutdown [OK]
Common Mistakes:
  • Assuming shutdown logs before startup
  • Missing signal parameter in shutdown log
  • Thinking only one hook runs
4. This NestJS service code has an error:
export class MyService implements OnApplicationShutdown {
  onApplicationShutdown() {
    console.log('Cleaning up');
  }
}

What is the error and how to fix it?
medium
A. Should implement OnModuleDestroy instead of OnApplicationShutdown
B. Wrong method name; should be onShutdown instead
C. Missing optional signal parameter in onApplicationShutdown method
D. No error; code is correct

Solution

  1. Step 1: Check method signature for OnApplicationShutdown

    The interface requires onApplicationShutdown(signal?: string) with an optional string parameter.
  2. Step 2: Identify missing parameter in method

    The method lacks the optional signal parameter, causing a signature mismatch error.
  3. Final Answer:

    Missing optional signal parameter in onApplicationShutdown method -> Option C
  4. Quick Check:

    Method signature must match interface including optional parameters [OK]
Hint: Include optional signal parameter in onApplicationShutdown method [OK]
Common Mistakes:
  • Omitting optional signal parameter
  • Using wrong method name
  • Confusing OnApplicationShutdown with OnModuleDestroy
5. You want to perform cleanup tasks only when the app shuts down due to a SIGTERM signal, ignoring other signals. How should you implement this in a NestJS service?
hard
A. Override the main bootstrap function to handle SIGTERM manually
B. Implement OnApplicationShutdown and check if signal === 'SIGTERM' inside onApplicationShutdown method
C. Use OnApplicationBootstrap to detect shutdown signals
D. Implement OnModuleDestroy and check for SIGTERM signal there

Solution

  1. Step 1: Choose correct lifecycle hook for app shutdown

    OnApplicationShutdown runs when the app is stopping and receives the shutdown signal.
  2. Step 2: Filter signal inside onApplicationShutdown method

    Inside onApplicationShutdown(signal?: string), check if signal === 'SIGTERM' to run cleanup only for that signal.
  3. Final Answer:

    Implement OnApplicationShutdown and check if signal === 'SIGTERM' inside onApplicationShutdown method -> Option B
  4. Quick Check:

    Filter shutdown signal inside OnApplicationShutdown hook [OK]
Hint: Check signal inside OnApplicationShutdown to filter SIGTERM [OK]
Common Mistakes:
  • Using OnModuleDestroy which runs on module destroy, not app shutdown
  • Trying to detect shutdown in OnApplicationBootstrap
  • Manually overriding bootstrap instead of lifecycle hooks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard