Lesson 4 / 33

Controllers & Routing

Handle HTTP requests with decorated methods.

A basic controller

@Controller marks a class as a controller; @Get(), @Post(), etc. decorate handler methods.

import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private usersService: UsersService) {}

  @Get()
  findAll() {
    return this.usersService.findAll();
  }

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.usersService.create(createUserDto);
  }
}

Route params & query

Use @Param() for URL segments, @Query() for query strings.

@Get(':id')
findOne(@Param('id') id: string) {
  return this.usersService.findOne(id);
}

@Get()
findAll(@Query('limit') limit: number = 10) {
  return this.usersService.findAll(limit);
}

HTTP verb decorators

@Get, @Post, @Put, @Delete, @Patch map to HTTP methods; the path argument is relative to the controller's base path.