What if your app could automatically understand and fix input types without extra code?
Why Built-in pipes (ParseIntPipe, ParseBoolPipe) in NestJS? - Purpose & Use Cases
Imagine you receive user input as strings in your web app, like '123' or 'true', but you need numbers or booleans to work with. You try to convert them manually every time before using them.
Manually converting input is repetitive and easy to forget. If you miss a conversion, your app might crash or behave strangely. It's also hard to keep your code clean and consistent.
Built-in pipes like ParseIntPipe and ParseBoolPipe automatically convert and validate input data for you. They ensure your data is the right type before your code runs, reducing errors and making your code simpler.
const id = parseInt(req.params.id);
const active = req.query.active === 'true';@Param('id', ParseIntPipe) id: number @Query('active', ParseBoolPipe) active: boolean
You can trust your input data types and focus on your app logic without worrying about manual conversions or validation.
When building an API, you often get IDs or flags as strings from URLs or queries. Using these pipes means your controller methods get clean, typed values ready to use.
Manual input conversion is error-prone and repetitive.
ParseIntPipe and ParseBoolPipe automate type conversion and validation.
This leads to cleaner, safer, and easier-to-maintain code.
Practice
ParseIntPipe and ParseBoolPipe?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 DQuick Check:
Pipe purpose = convert and validate input [OK]
- Confusing pipes with output formatting
- Thinking pipes manage database or routing
- Assuming pipes only validate without conversion
ParseIntPipe in a NestJS controller method parameter?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 benumber.Final Answer:
@Param('id', ParseIntPipe) id: number -> Option CQuick Check:
ParseIntPipe converts to number, so type = number [OK]
- Using string type with ParseIntPipe
- Applying pipe to wrong decorator like @Body for route param
- Assigning boolean type with ParseIntPipe
@Get(':active')
getStatus(@Param('active', ParseBoolPipe) active: boolean) {
return active ? 'Active' : 'Inactive';
}
What will be the response if the client requests /true?Solution
Step 1: Understand ParseBoolPipe behavior
ParseBoolPipe converts string 'true' to boolean true.Step 2: Evaluate the method return based on boolean value
Since active is true, the method returns 'Active'.Final Answer:
"Active" -> Option AQuick Check:
Input 'true' -> boolean true -> returns 'Active' [OK]
- Expecting string 'true' instead of boolean
- Assuming 400 error for valid boolean string
- Confusing output with input string
@Get(':id')
getUser(@Param('id', ParseIntPipe) id: number) {
return `User ID is ${id}`;
}
If a client sends a request to /abc, what will happen?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 AQuick Check:
Invalid int input -> 400 error [OK]
- Expecting string output instead of error
- Assuming NaN is returned
- Thinking it defaults to 0
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?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 BQuick Check:
Query param + ParseBoolPipe + boolean type = correct [OK]
- Using ParseIntPipe for boolean values
- Using @Body or @Param instead of @Query for query params
- Mismatching parameter type with pipe output
Ready to prove it?
Pass the test and this pattern moves unknown
