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:
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:
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:
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:
@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:
@Post()
create(@Body() createItemDto: CreateItemDto) {
return this.itemsService.create(createItemDto);
}Query Parameters
Query parameters can be accessed using the @Query() decorator:
@Get()
findAll(@Query('sort') sort: string, @Query('page') page: number) {
return `This action returns all items sorted by ${sort} on page ${page}`;
}