Performance: Query parameters
Query parameters affect how the server processes requests and can impact response time and payload size, indirectly influencing page load speed.
import { Controller, Get, Query } from '@nestjs/common'; import { IsOptional, IsString, IsInt } from 'class-validator'; class ItemQueryDto { @IsOptional() @IsString() category?: string; @IsOptional() @IsInt() limit?: number; } @Controller('items') export class ItemsController { @Get() getItems(@Query() query: ItemQueryDto) { // Validated and typed query parameters return this.itemsService.find(query); } }
import { Controller, Get, Query } from '@nestjs/common'; @Controller('items') export class ItemsController { @Get() getItems(@Query() query: any) { // Accepts all query params without validation return this.itemsService.find(query); } }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Unvalidated large query params | N/A (server-side) | N/A | Increases due to delayed response | [X] Bad |
| Validated, minimal query params | N/A (server-side) | N/A | Lower due to faster response | [OK] Good |
@Query() decorator in a NestJS controller?@Query()@Query() decorator extracts query parameters from the URL in a GET request.@Body() handle POST bodies, and @Param() handles route params, so they don't fit here.@Query() reads URL queries = A [OK]@Query() reads URL query strings [OK]@Query() with @Body()@Query() defines routes@Query() to inject servicespage in a NestJS controller method?@Query('paramName') syntax.@Query('page') correctly. Options A and C use wrong decorators, and D has invalid syntax.@Query('param') for query params = B [OK]@Query('name') to get specific query param [OK]@Param() instead of @Query()@Query.page@Body() for query parametersasync find(@Query() query) {
return query.page + '-' + query.limit;
}/items?page=2&limit=5?@Query() behavior@Query() decorator without arguments returns an object with all query parameters as strings.?page=2&limit=5, query.page is "2" and query.limit is "5". Concatenation returns "2-5".@Query() gets all query params as object [OK]@Query() returns undefinedsearch?:async search(@Query(search) searchTerm: string) {
return searchTerm;
}@Query decorator syntax@Query() must be a string literal naming the query parameter, e.g., @Query('search').@Query(search) without quotes, which is invalid syntax and causes an error.@Query decorator argument should be a string: @Query('search') -> Option B@Query('name') [OK]@Param() for query paramssort and filter. If filter is missing, it should default to "all". Which code snippet correctly implements this behavior?@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.@Query()Pass the test and this pattern moves unknown