kritsana.devpassing
runartifactsdocsworkhistorydispatch

© 2026 Kritsana Prasit — built from source on a self-hosted runner

resume.pdfrssdispatch

docs / NestJS

NestJS Controllers Guide

Learn how to build effective controllers in NestJS applications for handling HTTP requests and routing.

2 min read

NestJS Controllers Guide

Controllers are responsible for handling incoming requests and returning responses to the client in NestJS applications. This guide covers everything you need to know about creating and using controllers effectively.

Basic Controller

Here's a basic controller example:

typescript
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersService } from './users.service';
 
@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}
 
  @Get()
  findAll() {
    return this.usersService.findAll();
  }
 
  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.usersService.findOne(id);
  }
 
  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }
}

Request Object

You can access the request object directly:

typescript
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
 
@Controller('demo')
export class DemoController {
  @Get()
  findAll(@Req() request: Request) {
    console.log(request.headers);
    return 'This action returns all items';
  }
}

Response Status Codes

You can customize response status codes:

typescript
import { Controller, Post, HttpCode, HttpStatus } from '@nestjs/common';
 
@Controller('cats')
export class CatsController {
  @Post()
  @HttpCode(HttpStatus.CREATED)
  create() {
    return 'This action adds a new cat';
  }
}

Route Parameters

Route parameters can be accessed using the @Param() decorator:

typescript
@Get(':id')
findOne(@Param('id') id: string) {
  return `This action returns a #${id} item`;
}

Request Body

Use the @Body() decorator to access the request body:

typescript
@Post()
create(@Body() createItemDto: CreateItemDto) {
  return this.itemsService.create(createItemDto);
}

Query Parameters

Query parameters can be accessed using the @Query() decorator:

typescript
@Get()
findAll(@Query('sort') sort: string, @Query('page') page: number) {
  return `This action returns all items sorted by ${sort} on page ${page}`;
}

more NestJS guides

  • NestJS Guards and Authentication3 min read
  • NestJS Middleware Guide2 min read