📖 Scenario: You are building a simple NestJS application that will be used in a real company. To make sure it works well in the real world, you need to prepare it for production. This means setting up the app so it can handle real users safely and reliably.
🎯 Goal: Create a basic NestJS app structure, add a configuration setting for production mode, implement a simple health check route, and finalize the app with production-ready settings.
📋 What You'll Learn
Create a NestJS application module with a controller
Add a configuration variable to indicate production mode
Implement a health check endpoint that returns status
Complete the main bootstrap function with production readiness
💡 Why This Matters
🌍 Real World
Preparing a NestJS app for production ensures it runs reliably and safely when real users access it. Health checks help monitor app health, and configuration flags control behavior based on environment.
💼 Career
Understanding production readiness is essential for backend developers to deploy stable, maintainable, and scalable applications in professional environments.
Progress0 / 4 steps
1
Create the NestJS app module and controller
Create a NestJS module called AppModule and a controller called AppController with a method getStatus() that returns the string 'App is running'.
NestJS
Hint
Use @Controller() and @Get('status') decorators to create the controller and route.
2
Add a production mode configuration variable
Add a constant variable called isProduction and set it to true to indicate the app is running in production mode.
NestJS
Hint
Use const isProduction = true; to set the production mode flag.
3
Implement a health check endpoint
In the AppController, add a new method called healthCheck() with a @Get('health') decorator that returns an object { status: 'ok', production: isProduction }.
NestJS
Hint
Use @Get('health') and return an object with status and production keys.
4
Complete the main bootstrap function with production readiness
Add the bootstrap() async function that creates the NestJS app using AppModule, and if isProduction is true, enable app.enableShutdownHooks(). Then call await app.listen(3000).
NestJS
Hint
Use NestFactory.create(AppModule) to create the app and call app.listen(3000). Enable shutdown hooks if in production.
Practice
(1/5)
1. Why is production readiness important for a NestJS application?
easy
A. It helps the app use less memory in testing environments.
B. It makes the app run faster only during development.
C. It automatically writes the app's documentation.
D. It ensures the app is stable, secure, and performs well under real use.
Solution
Step 1: Understand production readiness goals
Production readiness focuses on stability, security, and performance in real use, not just development or testing.
Step 2: Compare options to goals
Only It ensures the app is stable, secure, and performs well under real use. matches these goals by ensuring the app is stable, secure, and performs well under real use.
Final Answer:
It ensures the app is stable, secure, and performs well under real use. -> Option D
Quick Check:
Production readiness = stability, security, performance [OK]
Hint: Focus on stability, security, and performance in real use [OK]
Common Mistakes:
Confusing development speed with production readiness
Thinking it only affects memory usage in tests
Assuming it auto-generates documentation
2. Which of the following is a correct way to manage configuration for production readiness in NestJS?
easy
A. Store configuration only in a JSON file inside the public folder.
B. Hardcode all settings directly in the source code.
C. Use environment variables and a configuration module.
D. Ask users to input configuration every time the app starts.
Solution
Step 1: Identify best practice for config management
Using environment variables and a configuration module is the standard way to manage settings safely and flexibly.
Step 2: Evaluate options
Use environment variables and a configuration module. matches best practice; others either hardcode, expose config publicly, or require manual input each start, which is impractical.
Final Answer:
Use environment variables and a configuration module. -> Option C
What will the client receive if an unexpected error occurs?
medium
A. A JSON response with statusCode 500 and message 'Internal server error'.
B. A plain text error message with status 200.
C. No response because the error is not caught.
D. A JSON response with statusCode 200 and message 'Success'.
Solution
Step 1: Analyze the catch method behavior
The catch method sets status to exception.getStatus() if available, else 500. It sends JSON with statusCode and message 'Internal server error'.
Step 2: Determine response for unexpected error
Unexpected errors lack getStatus(), so status is 500. The client gets JSON with statusCode 500 and message 'Internal server error'.
Final Answer:
A JSON response with statusCode 500 and message 'Internal server error'. -> Option A
Quick Check:
Unexpected error -> status 500 + JSON message [OK]
Hint: Unexpected errors default to status 500 with JSON message [OK]
Common Mistakes:
Assuming status 200 on errors
Thinking error is uncaught
Expecting plain text instead of JSON
4. You have this NestJS code snippet for logging:
import { Logger } from '@nestjs/common';
const logger = new Logger('AppModule');
function startApp() {
logger.log('Starting app...');
// Missing logger.error usage here
}
startApp();
What is the main issue regarding production readiness?
medium
A. There is no error logging to capture failures.
B. The logger should be imported from 'nestjs/core' instead.
C. The log message uses the wrong method name.
D. The logger instance is not created correctly.
Solution
Step 1: Check logger usage in code
The code creates a logger and logs a normal message but does not log errors anywhere.
Step 2: Understand production readiness logging needs
Production readiness requires error logging to track failures. Missing error logs means issues may go unnoticed.
Final Answer:
There is no error logging to capture failures. -> Option A
Quick Check:
Error logging missing = problem for production readiness [OK]
Hint: Check if errors are logged, not just info messages [OK]
Common Mistakes:
Thinking logger import path is wrong
Assuming logger instance creation is incorrect
Confusing log method names
5. You want to prepare your NestJS app for production by adding health checks, logging, and config management. Which combination of steps best ensures production readiness?
hard
A. Write custom health check code, console.log for logs, and hardcode config in main.ts.
B. Use @nestjs/terminus for health checks, Logger for logs, and ConfigModule with env variables.
C. Skip health checks, use third-party logging unrelated to NestJS, and store config in public JSON.
D. Only add health checks; logging and config are optional in production.
Solution
Step 1: Identify recommended tools for production readiness
@nestjs/terminus is the official health check module, Logger is the built-in logging tool, and ConfigModule with env variables is best practice for config.
Step 2: Evaluate options for completeness and best practices
Use @nestjs/terminus for health checks, Logger for logs, and ConfigModule with env variables. uses all recommended tools properly. Others either skip important parts or use poor practices.
Final Answer:
Use @nestjs/terminus for health checks, Logger for logs, and ConfigModule with env variables. -> Option B
Quick Check:
Health + logging + config with NestJS tools = production ready [OK]
Hint: Combine official NestJS tools for health, logging, and config [OK]
Common Mistakes:
Ignoring health checks or logging
Hardcoding config instead of env variables
Using unrelated or insecure tools
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.