📖 Scenario: You are a developer learning backend frameworks. You want to understand why NestJS was created and what problems it solves compared to plain Node.js or other frameworks.
🎯 Goal: Build a simple NestJS project that shows the basic setup and a simple controller to demonstrate the framework's structure and purpose.
📋 What You'll Learn
Create a basic NestJS application structure
Add a configuration variable for the port number
Create a simple controller with one route
Complete the main application bootstrap code
💡 Why This Matters
🌍 Real World
NestJS is used to build backend servers for web and mobile apps, APIs, and microservices with a clean and maintainable structure.
💼 Career
Many companies use NestJS for scalable Node.js backend development, so understanding why it exists helps in writing better server-side code and working in teams.
Progress0 / 4 steps
1
Create the basic NestJS application structure
Create a NestJS application by importing NestFactory from @nestjs/core and a root module called AppModule as an empty class.
NestJS
Hint
Start by importing NestFactory and define an empty class named AppModule.
2
Add a configuration variable for the port number
Add a constant variable called PORT and set it to 3000 to configure the server port.
NestJS
Hint
Use const PORT = 3000; to set the port number.
3
Create a simple controller with one route
Create a controller class called AppController with a method getHello that returns the string 'Hello from NestJS!'. Use the @Controller() decorator and @Get() decorator from @nestjs/common.
NestJS
Hint
Use @Controller() above the class and @Get() above the method that returns the greeting string.
4
Complete the main application bootstrap code
Write an async function called bootstrap that creates the NestJS app with NestFactory.create(AppModule), listens on PORT, and call bootstrap() at the end.
NestJS
Hint
Use an async function to create and start the NestJS app on the port.
Practice
(1/5)
1. Why was NestJS created as a framework for backend development?
easy
A. To replace frontend frameworks like React and Angular
B. To create mobile applications easily
C. To only support legacy JavaScript without TypeScript
D. To provide a clear and organized way to build scalable server-side apps
Solution
Step 1: Understand NestJS purpose
NestJS is designed to help developers build backend applications that are easy to maintain and scale.
Step 2: Compare options with NestJS goals
Options A, C, and D do not match NestJS's backend focus or modern language support.
Final Answer:
To provide a clear and organized way to build scalable server-side apps -> Option D
Quick Check:
Backend clarity and scalability = B [OK]
Hint: NestJS focuses on backend clarity and scalability [OK]
Common Mistakes:
Confusing NestJS with frontend frameworks
Thinking NestJS only supports old JavaScript
Assuming NestJS is for mobile apps
2. Which of the following is the correct way to create a basic NestJS controller?
easy
A. import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
}
B. import { Controller } from 'nestjs';
@Controller('/cats')
class Cats {
getAll() {
return 'Cats list';
}
}
D. import { Controller, Post } from '@nestjs/common';
@Controller('cats')
export class CatsController {
findAll() {
return 'All cats';
}
}
Solution
Step 1: Check import and decorator usage
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
} correctly imports from '@nestjs/common' and uses @Controller and @Get decorators properly.
Step 2: Verify method and return value
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
}'s method findAll returns a string as expected for a GET route. Other options have wrong imports, missing decorators, or wrong HTTP method.
Final Answer:
Option A code snippet -> Option A
Quick Check:
Correct decorators and imports = A [OK]
Hint: Look for @Controller and @Get from '@nestjs/common' [OK]
Common Mistakes:
Using wrong import paths
Missing HTTP method decorators
Using require instead of import
3. Consider this NestJS service code:
import { Injectable } from '@nestjs/common';
@Injectable()
export class MathService {
double(value: number): number {
return value * 2;
}
}
const service = new MathService();
console.log(service.double(5));
What will be printed in the console?
medium
A. 10
B. 5
C. undefined
D. Error: Injectable decorator missing
Solution
Step 1: Understand the double method
The method multiplies the input value by 2, so double(5) returns 10.
Step 2: Check usage of Injectable decorator
The @Injectable decorator marks the class for NestJS dependency injection but does not affect direct instantiation or method output.
Final Answer:
10 -> Option A
Quick Check:
5 times 2 equals 10 [OK]
Hint: Method doubles input; decorator doesn't block direct use [OK]
Common Mistakes:
Thinking @Injectable prevents direct instantiation
Expecting undefined return
Confusing decorator effects with runtime errors
4. This NestJS controller code has an error:
import { Controller, Get } from '@nestjs/common';
@Controller('dogs')
export class DogsController {
@Get()
getDogs() {
return this.dogs;
}
}
What is the main problem here?
medium
A. The import statement is wrong
B. The controller is missing a constructor to initialize 'dogs'
C. The @Get decorator is used incorrectly
D. The method getDogs should be async
Solution
Step 1: Identify usage of 'this.dogs'
The method returns 'this.dogs' but the class does not define or initialize 'dogs'.
Step 2: Check for initialization
Without a constructor or property assignment, 'this.dogs' is undefined, causing runtime errors.
Final Answer:
The controller is missing a constructor to initialize 'dogs' -> Option B
Quick Check:
Undefined property needs initialization [OK]
Hint: Check if all used properties are initialized [OK]
Common Mistakes:
Assuming decorators fix property issues
Thinking async is required without async code
Ignoring missing property initialization
5. You want to build a scalable backend app using NestJS that handles many users and keeps code organized. Which feature of NestJS helps most with this goal?
hard
A. Its use of global variables for shared state
B. Its built-in support for frontend UI components
C. Its modular architecture allowing separation of features into modules
D. Its automatic generation of mobile app code
Solution
Step 1: Identify scalability needs
Scalable apps need clear separation of concerns and organized code structure.
Step 2: Match NestJS features to needs
NestJS modules let you group related code, making it easier to maintain and scale. Other options do not support backend scalability.
Final Answer:
Its modular architecture allowing separation of features into modules -> Option C
Quick Check:
Modular design = scalable backend [OK]
Hint: Modular design is key for scalable backend apps [OK]
Common Mistakes:
Confusing backend with frontend features
Thinking NestJS generates mobile code
Using global variables instead of modules
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.