Explicación Detallada del Controlador de NestJS: Manejo de Diferentes Métodos de Solicitud HTTP y Parámetros de Ruta
- 877Palabras
- 4Minutos
- 08 Jul, 2024
NestJS es un marco para construir aplicaciones de servidor Node.js eficientes y escalables. El controlador es una parte importante de NestJS, encargado de manejar las solicitudes HTTP entrantes y devolver respuestas. Este artículo explicará en detalle cómo crear controladores en NestJS, manejar diferentes métodos de solicitud HTTP (como GET, POST, PUT, DELETE) y cómo utilizar parámetros de ruta y el cuerpo de la solicitud.
Descripción General del Controlador
El controlador se utiliza para definir las rutas en la aplicación y manejar las solicitudes entrantes. Cada controlador maneja un conjunto de solicitudes relacionadas, generalmente asociadas con un recurso específico (como usuarios, artículos, etc.). En NestJS, los controladores se definen a través de decoradores y métodos de clase.
Creación de un Controlador
En NestJS, los controladores se definen a través del decorador @Controller()
. Aquí hay un ejemplo simple de un controlador:
1import { Controller, Get } from "@nestjs/common";2
3@Controller("users")4export class UsersController {5 @Get()6 findAll() {7 return "This action returns all users";8 }9}
En el ejemplo anterior, definimos una clase UsersController
y utilizamos el decorador @Controller('users')
para marcarla como un controlador, estableciendo el prefijo de ruta como users
. El método findAll
está marcado con el decorador @Get()
, lo que indica que maneja solicitudes GET.
Manejo de Diferentes Métodos de Solicitud HTTP
El controlador de NestJS puede manejar varios métodos de solicitud HTTP, incluyendo GET, POST, PUT, DELETE, entre otros. Aquí hay un ejemplo que muestra cómo manejar estos métodos en un controlador:
1import {2 Controller,3 Get,4 Post,5 Put,6 Delete,7 Param,8 Body,9} from "@nestjs/common";10
11@Controller("users")12export class UsersController {13 @Get()14 findAll() {15 return "This action returns all users";16 }17
18 @Get(":id")19 findOne(@Param("id") id: string) {20 return `This action returns user with id ${id}`;21 }22
23 @Post()24 create(@Body() createUserDto: CreateUserDto) {25 return "This action adds a new user";26 }27
28 @Put(":id")29 update(@Param("id") id: string, @Body() updateUserDto: UpdateUserDto) {30 return `This action updates user with id ${id}`;31 }32
33 @Delete(":id")34 remove(@Param("id") id: string) {35 return `This action removes user with id ${id}`;36 }37}
En el ejemplo anterior, definimos cuatro métodos para manejar diferentes métodos de solicitud HTTP:
findAll
maneja solicitudes GET y devuelve todos los usuarios.findOne
maneja solicitudes GET con un parámetro de ruta y devuelve un usuario específico.create
maneja solicitudes POST y crea un nuevo usuario.update
maneja solicitudes PUT con un parámetro de ruta y actualiza un usuario específico.remove
maneja solicitudes DELETE con un parámetro de ruta y elimina un usuario específico.
Uso de Parámetros de Ruta
Los parámetros de ruta se utilizan para pasar parámetros en la URL. En NestJS, se pueden obtener los parámetros de ruta a través del decorador @Param()
. Aquí hay un ejemplo:
1import { Controller, Get, Param } from "@nestjs/common";2
3@Controller("users")4export class UsersController {5 @Get(":id")6 findOne(@Param("id") id: string) {7 return `This action returns user with id ${id}`;8 }9}
En el ejemplo anterior, el método findOne
está definido con el decorador @Get(':id')
, indicando una solicitud GET con un parámetro de ruta id
. A través del decorador @Param('id')
, podemos obtener el valor del parámetro de ruta id
.
Uso del Cuerpo de la Solicitud
El cuerpo de la solicitud se utiliza para pasar datos en la solicitud, generalmente en solicitudes POST y PUT. En NestJS, se puede obtener el cuerpo de la solicitud a través del decorador @Body()
. Aquí hay un ejemplo:
1import { Controller, Post, Body } from "@nestjs/common";2
3class CreateUserDto {4 readonly name: string;5 readonly age: number;6}7
8@Controller("users")9export class UsersController {10 @Post()11 create(@Body() createUserDto: CreateUserDto) {12 return `This action adds a new user with name ${createUserDto.name} and age ${createUserDto.age}`;13 }14}
En el ejemplo anterior, el método create
está definido con el decorador @Post()
, indicando una solicitud POST. A través del decorador @Body()
, podemos obtener los datos del cuerpo de la solicitud, y se utiliza el tipo CreateUserDto
para restringir el tipo de datos.
Descripción de los Parámetros
@Controller()
: Se utiliza para definir el controlador y especificar el prefijo de ruta.@Get()
,@Post()
,@Put()
,@Delete()
: Se utilizan para definir rutas que manejan diferentes métodos de solicitud HTTP.@Param()
: Se utiliza para obtener los parámetros de ruta.@Body()
: Se utiliza para obtener el cuerpo de la solicitud.
DTO (Objeto de Transferencia de Datos)
DTO se utiliza para encapsular los datos de la solicitud. En el ejemplo anterior, definimos una clase CreateUserDto
para encapsular los datos de la solicitud de creación de usuario:
1class CreateUserDto {2 readonly name: string;3 readonly age: number;4}
Restricción de Tipo para Parámetros de Ruta y Cuerpo de la Solicitud
Utilizando la restricción de tipos de TypeScript, podemos asegurar que los tipos de datos de los parámetros de ruta y el cuerpo de la solicitud sean correctos. Aquí hay un ejemplo completo que muestra cómo usar parámetros de ruta y el cuerpo de la solicitud:
1import { Controller, Get, Post, Put, Param, Body } from "@nestjs/common";2
3class UpdateUserDto {4 readonly name: string;5 readonly age: number;6}7
8@Controller("users")9export class UsersController {10 @Get(":id")11 findOne(@Param("id") id: string) {12 return `This action returns user with id ${id}`;13 }14
15 @Post()16 create(@Body() createUserDto: CreateUserDto) {17 return `This action adds a new user with name ${createUserDto.name} and age ${createUserDto.age}`;18 }19
20 @Put(":id")21 update(@Param("id") id: string, @Body() updateUserDto: UpdateUserDto) {22 return `This action updates user with id ${id}, new name ${updateUserDto.name}, new age ${updateUserDto.age}`;23 }24}
Conclusión
Este artículo explicó en detalle el controlador en NestJS, cómo crear controladores para manejar diferentes métodos de solicitud HTTP (como GET, POST, PUT, DELETE) y cómo utilizar parámetros de ruta y el cuerpo de la solicitud.