Bird
Raised Fist0
NestJSframework~10 mins

Default value pipe in NestJS - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Default value pipe
Request with param
↓
Pipe intercepts param
↓
Check if param is undefined or null
Yes No↓
Replace with default
↓
Pass value to handler
↓
Handler uses value
The Default value pipe checks if a parameter is missing and replaces it with a default before the handler uses it.
Execution Sample
NestJS
import { PipeTransform, Injectable } from '@nestjs/common';

@Injectable()
export class DefaultValuePipe implements PipeTransform {
  constructor(private readonly defaultValue: any) {}
  transform(value: any) {
    return value == null ? this.defaultValue : value;
  }
}
This pipe replaces null or undefined values with a default value before passing to the controller.
Execution Table
StepInput ValueCheck value == nullActionOutput Value
1undefinedtrueReplace with default 'guest'guest
2nulltrueReplace with default 'guest'guest
3'admin'falseKeep originaladmin
4'' (empty string)falseKeep original
50falseKeep original0
6falsefalseKeep originalfalse
7nulltrueReplace with default 'guest'guest
💡 All inputs processed; pipe replaced only null or undefined values with default.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7
valueundefinedundefinednull'admin'''0falsenull
outputN/Aguestguestadmin''0falseguest
Key Moments - 2 Insights
Why does the pipe replace undefined and null but not empty string or 0?
Because the pipe checks specifically for value == null, which matches only null or undefined, not other falsy values like empty string or zero (see execution_table rows 1, 2 vs 4, 5).
What happens if the input is false? Does the pipe replace it?
No, false is a valid value and not null or undefined, so the pipe keeps it as is (see execution_table row 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what output does the pipe produce when input is null at step 2?
Aundefined
Bnull
Cguest
Derror
💡 Hint
Check the 'Output Value' column at step 2 in the execution_table.
At which step does the pipe keep the original input 'admin' without replacing it?
AStep 1
BStep 3
CStep 5
DStep 7
💡 Hint
Look for the input value 'admin' in the execution_table and see the action taken.
If the default value was changed to 'user', what would be the output at step 7?
Auser
Bnull
Cguest
Dundefined
💡 Hint
Step 7 input is null, so the pipe replaces it with the default value (see variable_tracker and execution_table).
Concept Snapshot
Default Value Pipe in NestJS:
- Checks if input is null or undefined
- If yes, replaces with a default value
- Otherwise, keeps original input
- Used to ensure parameters have fallback values
- Implement by creating a class with transform method
- Helps avoid undefined errors in handlers
Full Transcript
The Default Value Pipe in NestJS intercepts incoming parameter values. It checks if the value is null or undefined. If so, it replaces the value with a preset default. Otherwise, it passes the original value unchanged. This ensures that controller handlers always receive a valid value, avoiding errors from missing parameters. The pipe is implemented as a class with a transform method that performs this check and replacement. The execution table shows how different inputs are handled step-by-step, with null and undefined replaced by the default, and other values kept as is.

Practice

(1/5)
1. What is the main purpose of the DefaultValuePipe in NestJS?
easy
A. To provide a fallback value when a request parameter is missing
B. To validate the type of a request parameter
C. To transform a string into a number
D. To throw an error if a parameter is missing

Solution

  1. 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.
  2. Step 2: Compare with other pipe functions

    Unlike validation or transformation pipes, DefaultValuePipe does not validate or convert but only sets a fallback value.
  3. Final Answer:

    To provide a fallback value when a request parameter is missing -> Option A
  4. Quick Check:

    DefaultValuePipe = fallback value [OK]
Hint: DefaultValuePipe sets fallback for missing inputs [OK]
Common Mistakes:
  • Confusing DefaultValuePipe with validation pipes
  • Thinking it throws errors on missing params
  • Assuming it transforms data types
2. Which of the following is the correct way to use DefaultValuePipe to set a default value of 10 for a query parameter named page?
easy
A. @Query('page', new DefaultValuePipe(10)) page: number
B. @Query('page', DefaultValuePipe(10)) page: number
C. @Query('page', DefaultValuePipe) page: number = 10
D. @Query('page', new DefaultValuePipe) page: number = 10

Solution

  1. Step 1: Check the syntax for using pipes in NestJS

    Pipes are instantiated with the new keyword and passed as the second argument to decorators like @Query.
  2. Step 2: Confirm the correct usage of DefaultValuePipe

    The DefaultValuePipe requires a value in its constructor, so new DefaultValuePipe(10) is correct.
  3. Final Answer:

    @Query('page', new DefaultValuePipe(10)) page: number -> Option A
  4. Quick Check:

    Use new DefaultValuePipe(value) with decorator [OK]
Hint: Always use 'new' to instantiate DefaultValuePipe [OK]
Common Mistakes:
  • Omitting 'new' keyword when creating the pipe
  • Passing DefaultValuePipe without parentheses
  • Assigning default value directly in parameter without pipe
3. Given the following controller method, what will be the value of limit if the request URL is /items (no query parameters)?
@Get('items')
getItems(@Query('limit', new DefaultValuePipe(5)) limit: number) {
  return limit;
}
medium
A. undefined
B. null
C. 5
D. 0

Solution

  1. Step 1: Analyze the request URL and query parameters

    The URL /items has no limit query parameter provided.
  2. Step 2: Understand DefaultValuePipe behavior

    Since limit is missing, DefaultValuePipe sets it to the default value 5.
  3. Final Answer:

    5 -> Option C
  4. Quick Check:

    Missing param uses default value 5 [OK]
Hint: Missing query uses DefaultValuePipe value [OK]
Common Mistakes:
  • Assuming undefined when param is missing
  • Confusing null with default value
  • Expecting zero instead of default
4. Identify the error in this NestJS controller method using DefaultValuePipe:
@Get('users')
getUsers(@Query('page', DefaultValuePipe(1)) page: number) {
  return page;
}
medium
A. Default value must be a string, not a number
B. DefaultValuePipe cannot be used with @Query decorator
C. Parameter 'page' should be optional with '?'
D. Missing 'new' keyword when instantiating DefaultValuePipe

Solution

  1. Step 1: Check how DefaultValuePipe is instantiated

    The pipe must be created with the new keyword, but here it is called like a function.
  2. Step 2: Confirm correct usage with @Query

    DefaultValuePipe works with @Query, so no error there.
  3. Final Answer:

    Missing 'new' keyword when instantiating DefaultValuePipe -> Option D
  4. Quick Check:

    Always use 'new' with DefaultValuePipe [OK]
Hint: Remember 'new' before DefaultValuePipe instance [OK]
Common Mistakes:
  • Calling DefaultValuePipe as a function without 'new'
  • Thinking DefaultValuePipe only works with @Param
  • Making parameter optional instead of using pipe
5. You want to create a controller method that accepts an optional 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?
hard
A. Use @Query('sort', new DefaultValuePipe('asc')) sort: string
B. Use a custom pipe that returns 'asc' if value is missing or empty string
C. Use @Query('sort', new DefaultValuePipe('asc')) sort: string = 'asc'
D. Use @Query('sort') sort: string = 'asc' without any pipe

Solution

  1. Step 1: Understand DefaultValuePipe limitations

    DefaultValuePipe only sets default if value is missing (undefined), not if empty string is provided.
  2. 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'.
  3. 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: string does not handle empty string; Use @Query('sort') sort: string = 'asc' without any pipe ignores pipe usage.
  4. Final Answer:

    Use a custom pipe that returns 'asc' if value is missing or empty string -> Option B
  5. Quick Check:

    DefaultValuePipe ignores empty string, custom pipe needed [OK]
Hint: DefaultValuePipe skips empty strings; use custom pipe [OK]
Common Mistakes:
  • Assuming DefaultValuePipe handles empty strings
  • Setting default in parameter but ignoring pipe
  • Not handling empty string case explicitly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard