📖 Scenario: You are building a simple notification system in a NestJS application. When a new user registers, the system should emit an event and handle it to send a welcome message.
🎯 Goal: Create a NestJS event emitter and listener to handle user registration events and send a welcome notification.
📋 What You'll Learn
Create an event payload interface for user data
Set up an event emitter service to emit user registration events
Create an event listener to handle the registration event
Log a welcome message when the event is handled
💡 Why This Matters
🌍 Real World
Event handling is common in backend applications to decouple actions, such as sending notifications after user actions.
💼 Career
Understanding event-driven architecture and NestJS event handling is valuable for backend developers working with scalable and maintainable applications.
Progress0 / 4 steps
1
Create User Registration Event Payload
Create an interface called UserRegisteredEvent with two string properties: username and email.
NestJS
Hint
Interfaces in TypeScript define the shape of an object. Use interface UserRegisteredEvent { username: string; email: string; }.
2
Set Up Event Emitter Service
Create a class called UserEventsService that injects EventEmitter2 from @nestjs/event-emitter. Add a method emitUserRegistered that takes a UserRegisteredEvent parameter and emits an event named user.registered with the event data.
NestJS
Hint
Use dependency injection to get EventEmitter2. Then call emit with the event name and data.
3
Create Event Listener for User Registration
Create a class called UserEventsListener with a method handleUserRegistered that listens to the user.registered event using the @OnEvent('user.registered') decorator. The method should accept a UserRegisteredEvent parameter.
NestJS
Hint
Use the @OnEvent decorator to listen to events. The method receives the event data as a parameter.
4
Log Welcome Message in Event Listener
Inside the handleUserRegistered method of UserEventsListener, add a console.log statement that outputs: Welcome, {username}! Your email is {email}. using the event data.
NestJS
Hint
Use a template string with backticks to include variables inside the message.
Practice
(1/5)
1. What is the main purpose of event handling in a NestJS application?
easy
A. To allow different parts of the app to react to actions without being tightly connected
B. To directly call methods from other classes
C. To replace all HTTP requests with events
D. To store data permanently in the database
Solution
Step 1: Understand event handling concept
Event handling lets parts of an app respond to actions independently, avoiding tight coupling.
Step 2: Compare options
Only To allow different parts of the app to react to actions without being tightly connected describes this purpose correctly; others describe unrelated concepts.
Final Answer:
To allow different parts of the app to react to actions without being tightly connected -> Option A
Quick Check:
Event handling = loose coupling reaction [OK]
Hint: Event handling means reacting without tight connections [OK]
Common Mistakes:
Thinking event handling replaces HTTP requests
Confusing event handling with direct method calls
Assuming event handling stores data
2. Which decorator is used to mark a class as an event handler in NestJS?
easy
A. @HandleEvent
B. @EventListener
C. @EventsHandler
D. @EventSubscriber
Solution
Step 1: Recall NestJS event handler syntax
The correct decorator to mark event handler classes is @EventsHandler.
Step 2: Verify options
Options B, C, and D are not valid NestJS decorators for event handlers.
Final Answer:
@EventsHandler -> Option C
Quick Check:
@EventsHandler marks event handlers [OK]
Hint: Use @EventsHandler to mark event handler classes [OK]
Common Mistakes:
Using @EventListener which is not a NestJS decorator
Confusing with @HandleEvent which does not exist
Using @EventSubscriber which is from other frameworks
3. Given this event handler code, what will be logged when eventBus.publish(new UserCreatedEvent('Alice')) is called?
A. The handle method is missing the event parameter
B. The @EventsHandler decorator is used incorrectly
C. The event class should not have a constructor
D. The console.log syntax is invalid
Solution
Step 1: Check handle method signature
The handle method must accept the event parameter to access event data.
Step 2: Identify usage of event data
Inside handle, orderId is used but not defined because event parameter is missing.
Final Answer:
The handle method is missing the event parameter -> Option A
Quick Check:
handle(event) needs event parameter [OK]
Hint: handle() must receive event parameter to access data [OK]
Common Mistakes:
Omitting event parameter in handle method
Misusing @EventsHandler decorator
Thinking constructor is not needed in event class
5. You want to handle two different events, UserCreatedEvent and UserDeletedEvent, in one handler class. Which approach correctly implements this in NestJS?
hard
A. Use @EventsHandler without parameters and check event type inside handle method
B. Use @EventsHandler(UserCreatedEvent, UserDeletedEvent) on one class and implement handle(event) with type checks
C. Use @EventsHandler on one class but implement two separate handle methods named handleUserCreated and handleUserDeleted
D. Create two separate handler classes each with @EventsHandler for one event
Solution
Step 1: Understand multiple event handling in one class
In NestJS, you can pass multiple event classes to @EventsHandler decorator on one class.
Step 2: Implement single handle method with event type checks
The handle method receives any event instance; inside it, you check the event type to handle accordingly.
Final Answer:
Use @EventsHandler(UserCreatedEvent, UserDeletedEvent) on one class and implement handle(event) with type checks -> Option B
Quick Check:
Multiple events in one handler use @EventsHandler(...events) [OK]
Hint: Use @EventsHandler with multiple events and one handle method [OK]
Common Mistakes:
Trying to define multiple handle methods in one class
Creating separate classes instead of one combined handler
Using @EventsHandler without parameters
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.