Using Built-in Pipes ParseIntPipe and ParseBoolPipe in NestJS
📖 Scenario: You are building a simple NestJS controller to handle user requests where some query parameters need to be converted to specific types automatically.For example, a user might send a query parameter age as a string, but you want it as a number. Similarly, a query parameter active might come as a string but should be treated as a boolean.
🎯 Goal: Create a NestJS controller with two GET routes that use the built-in pipes ParseIntPipe and ParseBoolPipe to automatically convert query parameters to the correct types.This will help ensure your controller methods receive the right data types without manual conversion.
📋 What You'll Learn
Create a controller class named UserController
Add a GET route /user/age that accepts a query parameter age and uses ParseIntPipe to convert it to a number
Add a GET route /user/active that accepts a query parameter active and uses ParseBoolPipe to convert it to a boolean
Use NestJS decorators @Controller, @Get, and @Query properly
Import ParseIntPipe and ParseBoolPipe from @nestjs/common
💡 Why This Matters
🌍 Real World
Web APIs often receive query parameters as strings. Using pipes like ParseIntPipe and ParseBoolPipe helps convert these strings to the correct types automatically, reducing manual parsing and errors.
💼 Career
Understanding and using NestJS built-in pipes is essential for backend developers working with NestJS to build robust and type-safe APIs.
Progress0 / 4 steps
1
Create the UserController class with imports
Create a NestJS controller class named UserController. Import Controller, Get, and Query from @nestjs/common. Do not add any methods yet.
NestJS
Hint
Use @Controller('user') above the class declaration to set the route prefix.
2
Add ParseIntPipe import and age route method
Import ParseIntPipe from @nestjs/common. Add a GET route method named getAge with path 'age'. Use @Query('age', ParseIntPipe) to get the age query parameter as a number. The method should return the age value.
NestJS
Hint
Use @Get('age') above the method and @Query('age', ParseIntPipe) to convert the query parameter.
3
Add ParseBoolPipe import and active route method
Import ParseBoolPipe from @nestjs/common. Add a GET route method named getActive with path 'active'. Use @Query('active', ParseBoolPipe) to get the active query parameter as a boolean. The method should return the active value.
NestJS
Hint
Use @Get('active') and @Query('active', ParseBoolPipe) to convert the query parameter to boolean.
4
Complete the UserController with both routes
Ensure the UserController class includes both getAge and getActive methods with their respective pipes and returns. The class should be decorated with @Controller('user') and import all necessary decorators and pipes from @nestjs/common.
NestJS
Hint
Make sure both methods and imports are present and correctly used.
Practice
(1/5)
1. What is the main purpose of NestJS built-in pipes like ParseIntPipe and ParseBoolPipe?
easy
A. To create new HTTP routes in the application
B. To format output data before sending it to the client
C. To handle database connections automatically
D. To automatically convert and validate input types like numbers and booleans
Solution
Step 1: Understand the role of pipes in NestJS
Pipes transform and validate incoming data before it reaches the route handler.
Step 2: Identify what ParseIntPipe and ParseBoolPipe do
They convert string inputs to integer and boolean types respectively, ensuring correct data types.
Final Answer:
To automatically convert and validate input types like numbers and booleans -> Option D
Quick Check:
Pipe purpose = convert and validate input [OK]
Hint: Pipes transform inputs before controller methods run [OK]
Common Mistakes:
Confusing pipes with output formatting
Thinking pipes manage database or routing
Assuming pipes only validate without conversion
2. Which of the following is the correct way to use ParseIntPipe in a NestJS controller method parameter?
easy
A. @Body('id', ParseIntPipe) id: string
B. @Param('id', ParseIntPipe) id: string
C. @Param('id', ParseIntPipe) id: number
D. @Query('id', ParseIntPipe) id: boolean
Solution
Step 1: Check the parameter decorator and pipe usage
Using @Param('id', ParseIntPipe) applies the pipe to convert the 'id' route parameter.
Step 2: Match the parameter type with the pipe's output
ParseIntPipe converts input to a number, so the parameter type must be number.
Final Answer:
@Param('id', ParseIntPipe) id: number -> Option C
Quick Check:
ParseIntPipe converts to number, so type = number [OK]
Hint: ParseIntPipe means parameter type must be number [OK]
Common Mistakes:
Using string type with ParseIntPipe
Applying pipe to wrong decorator like @Body for route param
Hint: ParseBoolPipe converts 'true' string to boolean true [OK]
Common Mistakes:
Expecting string 'true' instead of boolean
Assuming 400 error for valid boolean string
Confusing output with input string
4. Consider this NestJS controller method:
@Get(':id')
getUser(@Param('id', ParseIntPipe) id: number) {
return `User ID is ${id}`;
}
If a client sends a request to /abc, what will happen?
medium
A. Throws a 400 Bad Request error
B. Returns 'User ID is NaN'
C. Returns 'User ID is abc'
D. Returns 'User ID is 0'
Solution
Step 1: Understand ParseIntPipe input validation
ParseIntPipe tries to convert 'abc' to a number but fails.
Step 2: Identify NestJS behavior on invalid pipe input
When conversion fails, NestJS returns a 400 Bad Request error automatically.
Final Answer:
Throws a 400 Bad Request error -> Option A
Quick Check:
Invalid int input -> 400 error [OK]
Hint: Invalid number input with ParseIntPipe causes 400 error [OK]
Common Mistakes:
Expecting string output instead of error
Assuming NaN is returned
Thinking it defaults to 0
5. You want to create a NestJS route that accepts a query parameter enabled which should be a boolean. Which of the following is the best way to ensure enabled is automatically converted and validated as a boolean?
hard
A. @Query('enabled', ParseIntPipe) enabled: boolean
B. @Query('enabled', ParseBoolPipe) enabled: boolean
C. @Body('enabled', ParseBoolPipe) enabled: string
D. @Param('enabled', ParseBoolPipe) enabled: boolean
Solution
Step 1: Identify the correct decorator for query parameters
Query parameters use the @Query decorator.
Step 2: Match the pipe and parameter type
ParseBoolPipe converts string to boolean, so parameter type must be boolean.
Final Answer:
@Query('enabled', ParseBoolPipe) enabled: boolean -> Option B
Quick Check:
Query param + ParseBoolPipe + boolean type = correct [OK]
Hint: Use @Query with ParseBoolPipe for boolean query params [OK]
Common Mistakes:
Using ParseIntPipe for boolean values
Using @Body or @Param instead of @Query for query params
Mismatching parameter type with pipe output
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.