Bird
Raised Fist0
NestJSframework~5 mins

Decorator-based architecture in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a decorator in NestJS?
A decorator in NestJS is a special function that adds metadata or behavior to classes, methods, or properties. It helps organize code by marking parts with extra information NestJS uses to build the app.
Click to reveal answer
beginner
How does the @Controller() decorator work in NestJS?
The @Controller() decorator marks a class as a controller that handles incoming HTTP requests. It tells NestJS to group related routes inside this class.
Click to reveal answer
beginner
What role do method decorators like @Get() or @Post() play in NestJS?
Method decorators like @Get() or @Post() define which HTTP method and route a class method should respond to. They connect URLs to specific functions.
Click to reveal answer
intermediate
Why is decorator-based architecture helpful in NestJS?
It keeps code clean and easy to read by clearly showing what each part does. It also helps NestJS automatically build the app structure and handle requests without extra setup.
Click to reveal answer
intermediate
Can you explain how dependency injection uses decorators in NestJS?
Decorators like @Injectable() mark classes as services that NestJS can create and share. Then, constructor parameters typed with classes let NestJS automatically provide those services where needed.
Click to reveal answer
What does the @Injectable() decorator do in NestJS?
AMarks a class as a service that can be injected
BDefines a route handler
CMarks a class as a controller
DCreates a database connection
Which decorator would you use to handle HTTP GET requests in NestJS?
A@Post()
B@Get()
C@Controller()
D@Injectable()
What is the main purpose of decorators in NestJS architecture?
ATo create database tables
BTo write CSS styles
CTo add metadata and organize code structure
DTo run JavaScript in the browser
How does NestJS know which class is a controller?
ABy the class name
BBy the file extension
CBy the @Injectable() decorator
DBy the @Controller() decorator
Which decorator helps NestJS inject dependencies automatically?
A@Injectable()
B@Post()
C@Controller()
D@Get()
Describe how decorators help organize a NestJS application.
Think about how NestJS uses special marks to know what each part does.
You got /4 concepts.
    Explain the role of @Controller() and @Get() decorators in handling web requests.
    Focus on how NestJS matches URLs to functions.
    You got /4 concepts.

      Practice

      (1/5)
      1. In NestJS, what is the main purpose of using decorators like @Controller() and @Injectable()?
      easy
      A. To replace the need for writing any class methods
      B. To execute the class methods automatically on app start
      C. To mark classes with specific roles and add metadata for NestJS to manage
      D. To style the output of the application in the browser

      Solution

      1. Step 1: Understand decorator roles in NestJS

        Decorators like @Controller() and @Injectable() add metadata to classes, telling NestJS their purpose.
      2. Step 2: Recognize how NestJS uses this metadata

        NestJS uses this metadata to organize and manage components like controllers and services during runtime.
      3. Final Answer:

        To mark classes with specific roles and add metadata for NestJS to manage -> Option C
      4. Quick Check:

        Decorators add metadata = C [OK]
      Hint: Decorators label classes for NestJS to organize [OK]
      Common Mistakes:
      • Thinking decorators run methods automatically
      • Confusing decorators with styling tools
      • Believing decorators remove the need for methods
      2. Which of the following is the correct way to define a controller class in NestJS using decorators?
      easy
      A. @Controller() class MyController { }
      B. class MyController { }
      C. function Controller() { } class MyController { }
      D. @Injectable() class MyController { }

      Solution

      1. Step 1: Recall the syntax for controller decorators

        In NestJS, the @Controller() decorator is placed immediately before the class definition.
      2. Step 2: Check each option for correct decorator usage

        @Controller() class MyController { } correctly shows @Controller() before the class. class MyController { } lacks any decorator. function Controller() { } class MyController { } incorrectly defines a function instead of using a decorator. @Injectable() class MyController { } uses @Injectable() which is for services, not controllers.
      3. Final Answer:

        @Controller() class MyController { } -> Option A
      4. Quick Check:

        Controller decorator before class = B [OK]
      Hint: Controller classes need @Controller() decorator above class [OK]
      Common Mistakes:
      • Omitting the decorator entirely
      • Using @Injectable() instead of @Controller()
      • Trying to define decorators as functions
      3. Given the following NestJS controller code, what will be the output when a GET request is made to '/hello'?
      @Controller('hello')
      export class HelloController {
        @Get()
        greet() {
          return 'Hello, NestJS!';
        }
      }
      medium
      A. "Hello, NestJS!"
      B. 404 Not Found error
      C. An empty response
      D. A runtime error due to missing decorator

      Solution

      1. Step 1: Analyze the route and method decorators

        The @Controller('hello') sets the base path to '/hello'. The @Get() decorator on greet() means this method handles GET requests to '/hello'.
      2. Step 2: Understand the method return value

        The greet() method returns the string 'Hello, NestJS!'. So, a GET request to '/hello' returns this string as the response.
      3. Final Answer:

        "Hello, NestJS!" -> Option A
      4. Quick Check:

        GET /hello returns method string = A [OK]
      Hint: Match @Controller path with @Get method for output [OK]
      Common Mistakes:
      • Assuming 404 because of missing route
      • Expecting JSON instead of string
      • Thinking decorators cause runtime errors here
      4. Identify the error in the following NestJS service code:
      @Injectable
      export class UserService {
        getUser() {
          return { name: 'Alice' };
        }
      }
      medium
      A. Return value must be a string, not an object
      B. Missing parentheses in @Injectable decorator
      C. Class name should be UserServices
      D. Method getUser() should be async

      Solution

      1. Step 1: Check the decorator syntax

        The @Injectable decorator requires parentheses even if no arguments are passed, so it should be @Injectable().
      2. Step 2: Verify other code parts

        The method getUser() can be synchronous and return an object. Class name and return type are valid as is.
      3. Final Answer:

        Missing parentheses in @Injectable decorator -> Option B
      4. Quick Check:

        @Injectable() needs parentheses = D [OK]
      Hint: Always add () after @Injectable even if empty [OK]
      Common Mistakes:
      • Omitting parentheses on decorators
      • Thinking methods must be async
      • Changing class names unnecessarily
      5. You want to create a NestJS controller that handles GET requests to '/users/:id' and returns the user ID from the URL. Which of the following code snippets correctly uses decorators to achieve this?
      hard
      A.
      @Controller('users')
      export class UserController {
        @Get(':id')
        getUser(id: string) {
          return `User ID is ${id}`;
        }
      }
      B.
      @Controller('users')
      export class UserController {
        @Get()
        getUser(@Body('id') id: string) {
          return `User ID is ${id}`;
        }
      }
      C.
      @Controller('users')
      export class UserController {
        @Post(':id')
        getUser(@Param('id') id: string) {
          return `User ID is ${id}`;
        }
      }
      D.
      @Controller('users')
      export class UserController {
        @Get(':id')
        getUser(@Param('id') id: string) {
          return `User ID is ${id}`;
        }
      }

      Solution

      1. Step 1: Identify the correct HTTP method and route parameter usage

        The route is '/users/:id' and should respond to GET requests, so @Get(':id') is correct.
      2. Step 2: Check parameter decorator usage

        The method parameter must use @Param('id') to extract the 'id' from the URL path.
        @Controller('users')
        export class UserController {
          @Get(':id')
          getUser(@Param('id') id: string) {
            return `User ID is ${id}`;
          }
        }
        does this correctly.
      3. Step 3: Verify other options

        @Controller('users')
        export class UserController {
          @Get()
          getUser(@Body('id') id: string) {
            return `User ID is ${id}`;
          }
        }
        uses @Body('id') which reads from request body, not URL.
        @Controller('users')
        export class UserController {
          @Post(':id')
          getUser(@Param('id') id: string) {
            return `User ID is ${id}`;
          }
        }
        uses POST instead of GET.
        @Controller('users')
        export class UserController {
          @Get(':id')
          getUser(id: string) {
            return `User ID is ${id}`;
          }
        }
        misses the @Param decorator, so 'id' won't be injected.
      4. Final Answer:

        The code snippet with @Get(':id') and @Param('id') -> Option D
      5. Quick Check:

        GET + @Param('id') for URL param = A [OK]
      Hint: Use @Get(':id') and @Param('id') to get URL parameters [OK]
      Common Mistakes:
      • Using @Body instead of @Param for URL params
      • Using wrong HTTP method decorator
      • Forgetting @Param decorator on method argument
      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