📖 Scenario: You are building a simple NestJS backend to manage a list of books in a library. Each book has an id, title, and author.This backend will allow users to create, read, update, and delete books.
🎯 Goal: Build a NestJS service that performs basic CRUD operations on an in-memory list of books.
📋 What You'll Learn
Create an initial array of books with exact entries
Add a variable to track the next book ID
Implement methods to create, read, update, and delete books
Export the service class with all CRUD methods
💡 Why This Matters
🌍 Real World
Backend services often need to manage data with create, read, update, and delete operations. This project shows how to do that simply with NestJS.
💼 Career
Understanding CRUD operations in NestJS is essential for backend developers building APIs and services.
Progress0 / 4 steps
1
Data Setup: Create initial books array
Create a variable called books that is an array containing these exact objects: { id: 1, title: '1984', author: 'George Orwell' } and { id: 2, title: 'Brave New World', author: 'Aldous Huxley' }.
NestJS
Hint
Use const books = [ ... ] with two objects inside.
2
Configuration: Add nextId variable
Add a variable called nextId and set it to 3 to track the next book ID.
NestJS
Hint
Use let nextId = 3; to allow incrementing later.
3
Core Logic: Implement CRUD methods in BooksService
Create a class called BooksService with these methods: findAll() that returns books, findOne(id) that returns the book with matching id, create(title, author) that adds a new book with a new id, update(id, title, author) that updates the matching book, and remove(id) that deletes the book with the given id. Use the variables books and nextId inside the class.
NestJS
Hint
Define a class with methods using the books array and nextId variable.
4
Completion: Export the BooksService class
Add export default BooksService; at the end of the file to export the service class.
NestJS
Hint
Use export default BooksService; at the end.
Practice
(1/5)
1. In NestJS, which decorator is used in a controller method to handle HTTP POST requests for creating data?
easy
A. @Post
B. @Get
C. @Put
D. @Delete
Solution
Step 1: Understand HTTP methods and their NestJS decorators
HTTP POST is used to create new data. NestJS uses @Post decorator for this.
Step 2: Match the decorator to the HTTP method
@Get is for reading, @Put for updating, and @Delete for deleting data, so they don't fit creating data.
Final Answer:
@Post -> Option A
Quick Check:
POST = @Post [OK]
Hint: POST requests use @Post decorator in NestJS controllers [OK]
Common Mistakes:
Confusing @Get with @Post
Using @Put for creating data
Using @Delete for creation
2. Which of the following is the correct way to extract a route parameter named id in a NestJS controller method?
easy
A. async getItem(@Body('id') id: string) {}
B. async getItem(@Query('id') id: string) {}
C. async getItem(@Param('id') id: string) {}
D. async getItem(@Headers('id') id: string) {}
Solution
Step 1: Identify the decorator for route parameters
@Param is used to extract parameters from the URL path, such as /items/:id.
Step 2: Check other decorators and their uses
@Body extracts data from the request body, @Query from query strings, and @Headers from HTTP headers, so they don't get route params.
Final Answer:
async getItem(@Param('id') id: string) {} -> Option C
Quick Check:
Route param = @Param [OK]
Hint: Use @Param to get URL parameters in NestJS [OK]
Common Mistakes:
Using @Body to get URL params
Using @Query for route params
Confusing @Headers with @Param
3. Given this NestJS controller method, what will be the response if a client sends a DELETE request to /items/5 and the service deletes the item successfully?
D. Missing @Param decorator to get the id from URL
Solution
Step 1: Check how the id is obtained
The method expects id from updateDto.id, but the route has ':id' parameter which is not extracted.
Step 2: Identify missing @Param decorator
To get id from URL, @Param('id') id: string should be added as a parameter to the method.
Final Answer:
Missing @Param decorator to get the id from URL -> Option D
Quick Check:
URL param needs @Param [OK]
Hint: Use @Param to get URL id in update methods [OK]
Common Mistakes:
Assuming id comes from body without @Param
Confusing @Body with @Query
Ignoring route parameters
5. You want to implement a NestJS controller method to update an item by its id from the URL and new data from the request body. Which of the following method signatures correctly follows NestJS CRUD patterns?
D. async update(@Param() params: any) { return this.itemsService.update(params.id, params); }
Solution
Step 1: Identify correct decorators for id and body
Use @Param('id') to get id from URL and @Body() to get update data object.
Step 2: Check method parameters and service call
async update(@Param('id') id: string, @Body() updateDto: UpdateItemDto) { return this.itemsService.update(id, updateDto); } correctly separates id and updateDto and calls service with both.