📖 Scenario: You are building a simple NestJS API for a bookstore. You want to create a route that can receive a book's ID as a parameter in the URL and return details about that book.
🎯 Goal: Build a NestJS controller with a route that accepts a bookId as a route parameter and returns a message including that bookId.
📋 What You'll Learn
Create a controller named BooksController.
Add a route handler method named getBookById.
Use the @Param decorator to extract the bookId from the route.
Return a string message that includes the bookId.
💡 Why This Matters
🌍 Real World
Route parameters are used in web APIs to identify specific resources, like books, users, or orders, by their unique IDs in the URL.
💼 Career
Understanding route parameters is essential for backend developers building RESTful APIs with frameworks like NestJS.
Progress0 / 4 steps
1
Create the BooksController class
Create a class called BooksController and decorate it with @Controller('books').
NestJS
Hint
Use @Controller('books') above the class to define the route prefix.
2
Add the getBookById method with route parameter
Inside BooksController, add a method called getBookById decorated with @Get(':bookId') to handle GET requests with a bookId parameter.
NestJS
Hint
Use @Get(':bookId') to define the route with a parameter named bookId.
3
Extract the bookId parameter using @Param decorator
Modify the getBookById method to accept a parameter called bookId using the @Param('bookId') decorator from @nestjs/common.
NestJS
Hint
Import @Param and use it to get the bookId from the URL.
4
Return a message including the bookId
Inside the getBookById method, return a string like `Book ID requested is: ${bookId}` that includes the bookId parameter.
NestJS
Hint
Use a template string to include the bookId in the returned message.
Practice
(1/5)
1. What does the : symbol represent in a NestJS route path like @Get('users/:id')?
easy
A. It is used to comment out the route path.
B. It defines a query parameter to be passed in the URL.
C. It indicates a static part of the URL path.
D. It marks id as a dynamic route parameter to capture from the URL.
Solution
Step 1: Understand route path syntax
The colon : before id in @Get('users/:id') means id is a variable part of the URL.
Step 2: Identify the role of dynamic parameters
This dynamic parameter allows the route to accept different id values from the URL, making the route flexible.
Final Answer:
It marks id as a dynamic route parameter to capture from the URL. -> Option D
Quick Check:
Colon means dynamic parameter = A [OK]
Hint: Colon before name means dynamic URL part [OK]
Common Mistakes:
Thinking colon means query parameter
Confusing static and dynamic parts
Assuming colon is for comments
2. Which of the following is the correct way to access a route parameter named userId inside a NestJS controller method?
easy
A. @Body('userId') userId: string
B. @Query('userId') userId: string
C. @Param('userId') userId: string
D. @Headers('userId') userId: string
Solution
Step 1: Identify decorator for route parameters
In NestJS, @Param() decorator is used to extract route parameters from the URL.
Step 2: Match parameter name
Using @Param('userId') correctly accesses the userId parameter from the route.
Final Answer:
@Param('userId') userId: string -> Option C
Quick Check:
@Param for route params = C [OK]
Hint: Use @Param('name') to get route parameters [OK]
Common Mistakes:
Using @Query instead of @Param for route params
Trying to get route params from @Body or @Headers
Forgetting to specify parameter name in @Param
3. Given this NestJS controller method:
@Get('products/:id')
getProduct(@Param('id') id: string) {
return `Product ID is ${id}`;
}
What will be the response when a client requests /products/42?
medium
A. "Product ID is 42"
B. "Product ID is id"
C. "Product ID is undefined"
D. 404 Not Found error
Solution
Step 1: Understand route parameter extraction
The @Param('id') decorator extracts the value 42 from the URL /products/42.
Step 2: Check returned string
The method returns the string with the extracted id interpolated: "Product ID is 42".
Final Answer:
"Product ID is 42" -> Option A
Quick Check:
Route param 'id' = 42 in output [OK]
Hint: Route param value replaces :id in URL [OK]
Common Mistakes:
Expecting literal 'id' instead of value
Not using @Param to get the value
Assuming undefined if param missing
4. What is wrong with this NestJS controller method?
A. Missing parameter name inside @Param() decorator.
B. Route path should not have colon before orderId.
C. Method should use @Query instead of @Param.
D. Return statement syntax is invalid.
Solution
Step 1: Check @Param usage
The @Param() decorator without an argument returns an object of all params, not a single string.
Step 2: Identify mismatch in parameter type
The method expects orderId as a string, but @Param() without argument returns an object, causing a type mismatch.
Final Answer:
Missing parameter name inside @Param() decorator. -> Option A
Quick Check:
@Param needs name for single param = B [OK]
Hint: Use @Param('name') for single param, else get object [OK]
Common Mistakes:
Omitting parameter name in @Param() when expecting string
Confusing @Param with @Query
Thinking colon is wrong in route path
5. You want to create a NestJS route that accepts two parameters: category and itemId. Which of the following route paths and method signatures correctly captures both parameters?
hard
A. @Get('shop/:category/:itemId') getItem(@Body('category') category: string, @Body('itemId') itemId: string)
B. @Get('shop/:category/:itemId') getItem(@Param('category') category: string, @Param('itemId') itemId: string)
C. @Get('shop/:category/:itemId') getItem(@Query('category') category: string, @Query('itemId') itemId: string)
D. @Get('shop/:category/:itemId') getItem(@Param() params: string)
Solution
Step 1: Verify route path with two parameters
The path 'shop/:category/:itemId' correctly defines two dynamic route parameters.
Step 2: Check method parameters for correct decorators
Using @Param('category') and @Param('itemId') extracts each parameter individually as strings.
Final Answer:
@Get('shop/:category/:itemId') with getItem(@Param('category') category: string, @Param('itemId') itemId: string) -> Option B
Quick Check:
Use @Param('name') for each route param = D [OK]
Hint: Use @Param('name') for each route parameter [OK]
Common Mistakes:
Using @Param() with string instead of object
Using @Query or @Body instead of @Param for route params
Not matching parameter names exactly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.