The Default value pipe helps set a fallback value when no input is provided. It keeps your app working smoothly without errors.
Default value pipe in NestJS
new DefaultValuePipe(defaultValue)
The defaultValue is the value used if the input is missing or undefined.
This pipe can be used in controller method parameters to provide default values automatically.
@Query('page', new DefaultValuePipe(1)) page: number
@Query('sort', new DefaultValuePipe('asc')) sortOrder: string
@Param('id', new DefaultValuePipe('unknown')) id: string
This controller method uses DefaultValuePipe to set default values for 'limit' and 'offset' query parameters. If the client does not send these, the defaults 10 and 0 are used.
import { Controller, Get, Query, DefaultValuePipe } from '@nestjs/common'; @Controller('items') export class ItemsController { @Get() getItems( @Query('limit', new DefaultValuePipe(10)) limit: number, @Query('offset', new DefaultValuePipe(0)) offset: number ) { return `Limit is ${limit}, Offset is ${offset}`; } }
DefaultValuePipe only sets the value if the input is undefined or missing, not if it is null or empty string.
You can combine DefaultValuePipe with other pipes like ParseIntPipe to validate and convert input.
DefaultValuePipe sets fallback values for missing inputs.
It simplifies controller code by avoiding manual checks.
Use it with query, param, or body decorators to handle optional data.
Practice
DefaultValuePipe in NestJS?Solution
Step 1: Understand the role of DefaultValuePipe
The DefaultValuePipe is used to supply a default value when the expected input is not provided in the request.Step 2: Compare with other pipe functions
Unlike validation or transformation pipes, DefaultValuePipe does not validate or convert but only sets a fallback value.Final Answer:
To provide a fallback value when a request parameter is missing -> Option AQuick Check:
DefaultValuePipe = fallback value [OK]
- Confusing DefaultValuePipe with validation pipes
- Thinking it throws errors on missing params
- Assuming it transforms data types
DefaultValuePipe to set a default value of 10 for a query parameter named page?Solution
Step 1: Check the syntax for using pipes in NestJS
Pipes are instantiated with thenewkeyword and passed as the second argument to decorators like@Query.Step 2: Confirm the correct usage of DefaultValuePipe
The DefaultValuePipe requires a value in its constructor, sonew DefaultValuePipe(10)is correct.Final Answer:
@Query('page', new DefaultValuePipe(10)) page: number -> Option AQuick Check:
Usenew DefaultValuePipe(value)with decorator [OK]
- Omitting 'new' keyword when creating the pipe
- Passing DefaultValuePipe without parentheses
- Assigning default value directly in parameter without pipe
limit if the request URL is /items (no query parameters)?
@Get('items')
getItems(@Query('limit', new DefaultValuePipe(5)) limit: number) {
return limit;
}Solution
Step 1: Analyze the request URL and query parameters
The URL/itemshas nolimitquery parameter provided.Step 2: Understand DefaultValuePipe behavior
Sincelimitis missing, DefaultValuePipe sets it to the default value 5.Final Answer:
5 -> Option CQuick Check:
Missing param uses default value 5 [OK]
- Assuming undefined when param is missing
- Confusing null with default value
- Expecting zero instead of default
DefaultValuePipe:
@Get('users')
getUsers(@Query('page', DefaultValuePipe(1)) page: number) {
return page;
}Solution
Step 1: Check how DefaultValuePipe is instantiated
The pipe must be created with thenewkeyword, but here it is called like a function.Step 2: Confirm correct usage with @Query
DefaultValuePipe works with @Query, so no error there.Final Answer:
Missing 'new' keyword when instantiating DefaultValuePipe -> Option DQuick Check:
Always use 'new' with DefaultValuePipe [OK]
- Calling DefaultValuePipe as a function without 'new'
- Thinking DefaultValuePipe only works with @Param
- Making parameter optional instead of using pipe
sort query parameter with a default value of 'asc'. Additionally, if the client sends an empty string for sort, it should also default to 'asc'. Which approach correctly achieves this behavior?Solution
Step 1: Understand DefaultValuePipe limitations
DefaultValuePipe only sets default if value is missing (undefined), not if empty string is provided.Step 2: Consider handling empty string case
To treat empty string as missing, a custom pipe is needed to check both missing and empty values and return 'asc'.Step 3: Evaluate other options
Use@Query('sort', new DefaultValuePipe('asc')) sort: string = 'asc'sets default but does not handle empty string; Use@Query('sort', new DefaultValuePipe('asc')) sort: stringdoes not handle empty string; Use@Query('sort') sort: string = 'asc'without any pipe ignores pipe usage.Final Answer:
Use a custom pipe that returns 'asc' if value is missing or empty string -> Option BQuick Check:
DefaultValuePipe ignores empty string, custom pipe needed [OK]
- Assuming DefaultValuePipe handles empty strings
- Setting default in parameter but ignoring pipe
- Not handling empty string case explicitly
Ready to prove it?
Pass the test and this pattern moves unknown
