Bird
Raised Fist0
NestJSframework~5 mins

Query parameters in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What are query parameters in a web request?
Query parameters are key-value pairs added to the end of a URL after a question mark (?). They are used to send extra data to the server, like filters or options.
Click to reveal answer
beginner
How do you access query parameters in a NestJS controller?
You use the @Query() decorator in a controller method to get query parameters from the request URL.
Click to reveal answer
beginner
Example: How to get a single query parameter named 'page' in NestJS?
Use @Query('page') page: string in the controller method parameters to get the 'page' query parameter value.
Click to reveal answer
intermediate
What type of data does @Query() return if no parameter name is given?
@Query() returns an object containing all query parameters as key-value pairs.
Click to reveal answer
intermediate
Why is it important to validate query parameters in NestJS?
Validating query parameters helps prevent errors and security issues by ensuring the data is the right type and format before using it.
Click to reveal answer
In NestJS, which decorator is used to access query parameters?
A@Body()
B@Param()
C@Headers()
D@Query()
What does @Query('id') return in a NestJS controller method?
AThe URL path parameter 'id'
BAll query parameters as an object
CThe value of the 'id' query parameter
DThe request body
If a URL is /users?sort=asc&page=2, what does @Query() return?
A{ sort: 'asc', page: '2' }
B['sort', 'asc', 'page', '2']
Cnull
DOnly the first query parameter
Why should query parameters be validated in NestJS?
ATo avoid errors and security risks
BTo speed up the server
CTo change the URL
DTo encrypt data automatically
Which HTTP method commonly uses query parameters?
APOST
BGET
CPUT
DDELETE
Explain how to retrieve and use query parameters in a NestJS controller.
Think about how the URL query string maps to controller method parameters.
You got /4 concepts.
    Why is validating query parameters important in NestJS applications?
    Consider what could happen if invalid data is used directly.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the purpose of using @Query() decorator in a NestJS controller?
      easy
      A. To inject a service into the controller
      B. To define a new route path
      C. To handle POST request bodies
      D. To access query parameters sent in the URL

      Solution

      1. Step 1: Understand the role of @Query()

        The @Query() decorator extracts query parameters from the URL in a GET request.
      2. Step 2: Compare with other decorators

        Other decorators like @Body() handle POST bodies, and @Param() handles route params, so they don't fit here.
      3. Final Answer:

        To access query parameters sent in the URL -> Option D
      4. Quick Check:

        @Query() reads URL queries = A [OK]
      Hint: Remember: @Query() reads URL query strings [OK]
      Common Mistakes:
      • Confusing @Query() with @Body()
      • Thinking @Query() defines routes
      • Using @Query() to inject services
      2. Which of the following is the correct syntax to get a query parameter named page in a NestJS controller method?
      easy
      A. async getItems(@Param('page') page: number) {}
      B. async getItems(@Body('page') page: number) {}
      C. async getItems(@Query('page') page: number) {}
      D. async getItems(@Query.page page: number) {}

      Solution

      1. Step 1: Identify correct decorator usage

        To get a specific query parameter, use @Query('paramName') syntax.
      2. Step 2: Check syntax correctness

        async getItems(@Query('page') page: number) {} uses @Query('page') correctly. Options A and C use wrong decorators, and D has invalid syntax.
      3. Final Answer:

        async getItems(@Query('page') page: number) {} -> Option C
      4. Quick Check:

        Use @Query('param') for query params = B [OK]
      Hint: Use @Query('name') to get specific query param [OK]
      Common Mistakes:
      • Using @Param() instead of @Query()
      • Trying to access query param as @Query.page
      • Using @Body() for query parameters
      3. Given this NestJS controller method:
      async find(@Query() query) {
        return query.page + '-' + query.limit;
      }

      What will be the output if the URL is /items?page=2&limit=5?
      medium
      A. "2-5"
      B. "page-limit"
      C. "undefined-undefined"
      D. Runtime error

      Solution

      1. Step 1: Understand @Query() behavior

        The @Query() decorator without arguments returns an object with all query parameters as strings.
      2. Step 2: Check the returned string concatenation

        With URL ?page=2&limit=5, query.page is "2" and query.limit is "5". Concatenation returns "2-5".
      3. Final Answer:

        "2-5" -> Option A
      4. Quick Check:

        Query object has keys = "2-5" [OK]
      Hint: Without param name, @Query() gets all query params as object [OK]
      Common Mistakes:
      • Expecting numbers instead of strings from query params
      • Assuming @Query() returns undefined
      • Thinking it causes runtime error
      4. What is wrong with this NestJS controller method to get a query parameter search?:
      async search(@Query(search) searchTerm: string) {
        return searchTerm;
      }
      medium
      A. The method must be synchronous, not async
      B. The @Query decorator argument should be a string: @Query('search')
      C. The parameter name cannot be searchTerm
      D. The method should use @Param('search') instead

      Solution

      1. Step 1: Check @Query decorator syntax

        The argument to @Query() must be a string literal naming the query parameter, e.g., @Query('search').
      2. Step 2: Identify the error in the code

        The code uses @Query(search) without quotes, which is invalid syntax and causes an error.
      3. Final Answer:

        The @Query decorator argument should be a string: @Query('search') -> Option B
      4. Quick Check:

        Decorator argument must be string literal = D [OK]
      Hint: Always quote query param name in @Query('name') [OK]
      Common Mistakes:
      • Forgetting quotes around query param name
      • Using @Param() for query params
      • Thinking async keyword is disallowed
      5. You want to create a NestJS GET endpoint that accepts optional query parameters sort and filter. If filter is missing, it should default to "all". Which code snippet correctly implements this behavior?
      hard
      A. async getItems(@Query() query) { const filter = query.filter || 'all'; return { sort: query.sort, filter }; }
      B. async getItems(@Query('sort') sort: string, @Query('filter') filter: string = 'all') {}
      C. async getItems(@Query('sort') sort: string, @Query('filter') filter?: string) { if (!filter) filter = 'all'; return { sort, filter }; }
      D. async getItems(@Query('sort') sort: string, @Query('filter') filter: string) { filter = filter ?? 'all'; return { sort, filter }; }

      Solution

      1. Step 1: Understand default value handling for query params

        Query parameters come as strings or undefined. Default values should be set inside the method, not in parameter defaults.
      2. Step 2: Analyze each option

        async getItems(@Query('sort') sort: string, @Query('filter') filter: string = 'all') {} tries to set default in parameter, which doesn't work well with @Query(). async getItems(@Query() query) { const filter = query.filter || 'all'; return { sort: query.sort, filter }; } extracts all query params and sets default for filter inside method correctly. async getItems(@Query('sort') sort: string, @Query('filter') filter?: string) { if (!filter) filter = 'all'; return { sort, filter }; } tries to assign to parameter which is readonly. async getItems(@Query('sort') sort: string, @Query('filter') filter: string) { filter = filter ?? 'all'; return { sort, filter }; } assigns default after parameter, but parameter is readonly, so it causes error.
      3. Final Answer:

        async getItems(@Query() query) { const filter = query.filter || 'all'; return { sort: query.sort, filter }; } -> Option A
      4. Quick Check:

        Set defaults inside method body = A [OK]
      Hint: Set default query values inside method, not in parameters [OK]
      Common Mistakes:
      • Trying to assign default values in parameter list with @Query()
      • Mutating readonly parameters
      • Not handling missing query params properly
      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