📖 Scenario: You are building a simple NestJS service that logs messages during different stages of the application lifecycle. This helps you understand how NestJS manages startup and shutdown events.
🎯 Goal: Create a NestJS service that uses lifecycle hooks to log messages when the application starts and stops.
📋 What You'll Learn
Create a service class named AppLifecycleService
Implement the OnModuleInit interface and its onModuleInit() method
Implement the OnModuleDestroy interface and its onModuleDestroy() method
Log 'Application has started' inside onModuleInit()
Log 'Application is shutting down' inside onModuleDestroy()
💡 Why This Matters
🌍 Real World
Understanding application lifecycle hooks helps developers run setup and cleanup code automatically in NestJS applications, such as connecting to databases or closing resources.
💼 Career
Many backend developer roles require knowledge of framework lifecycle events to manage resources efficiently and ensure smooth application startup and shutdown.
Progress0 / 4 steps
1
Create the service class
Create a class called AppLifecycleService and export it.
NestJS
Hint
Use export class AppLifecycleService {} to create the class.
2
Add lifecycle interfaces
Import OnModuleInit and OnModuleDestroy from @nestjs/common. Then make AppLifecycleService implement both interfaces.
NestJS
Hint
Use implements OnModuleInit, OnModuleDestroy after the class name.
3
Add lifecycle methods with logs
Inside AppLifecycleService, add the method onModuleInit() that logs 'Application has started'. Also add onModuleDestroy() that logs 'Application is shutting down'. Use console.log() for logging.
NestJS
Hint
Define both methods exactly as named and use console.log with the exact messages.
4
Export the service for use
Ensure the AppLifecycleService class is exported so it can be used in other parts of the application.
NestJS
Hint
Make sure the export keyword is before the class declaration.
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
Step 1: Understand module initialization timing
The OnModuleInit hook runs immediately after the module's dependencies are resolved and the module is set up.
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.
Final Answer:
OnModuleInit -> Option A
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
Step 1: Identify correct interface and method signature
The OnApplicationShutdown interface requires implementing onApplicationShutdown(signal?: string) method.
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.
Final Answer:
export class MyService implements OnApplicationShutdown { onApplicationShutdown(signal?: string) { /* code */ } } -> Option A
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
Step 1: Check method signature for OnApplicationShutdown
The interface requires onApplicationShutdown(signal?: string) with an optional string parameter.
Step 2: Identify missing parameter in method
The method lacks the optional signal parameter, causing a signature mismatch error.
Final Answer:
Missing optional signal parameter in onApplicationShutdown method -> Option C
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
Step 1: Choose correct lifecycle hook for app shutdown
OnApplicationShutdown runs when the app is stopping and receives the shutdown signal.
Step 2: Filter signal inside onApplicationShutdown method
Inside onApplicationShutdown(signal?: string), check if signal === 'SIGTERM' to run cleanup only for that signal.
Final Answer:
Implement OnApplicationShutdown and check if signal === 'SIGTERM' inside onApplicationShutdown method -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.