Usamos un nuevo decorador para la función de crear esto implementando @Post
Introducción a NestJS
¿Qué es NestJS?
Crea tu primer proyecto con NestJS
Estructura de aplicaciones en NestJS
Presentación del proyecto: Platzi Store
Repaso a TypeScript: tipos y POO
REST API
Introducción a controladores
GET: recibir parámetros
GET: parámetros query
Separación de responsabilidades
Instalación de Postman o Insomia
POST: método para crear
Métodos PUT y DELETE para editar y eliminar
Códigos de estado o HTTP response status codes
Integridad de datos
Introducción a servicios: crea tu primer servicio
Implementando servicios en tu controlador
Manejo de errores con throw y NotFoundException
Introducción a pipes: usa tu primer pipe
Crea tu propio pipe
Data Transfers Objects
Validando parámetros con class-validator y mapped-types
Evitando parámetros incorrectos
Próximos pasos
Reto: controladores y servicios restantes
Continúa con el Curso de NestJS: Programación Modular
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
import { ..., Post, Body } from '@nestjs/common';
@Controller('products')
export class ProductsController {
...
@Post() // 👈 New decorator
create(@Body() payload: any) {
return {
message: 'accion de crear',
payload,
};
}
}
Aportes 19
Preguntas 3
Usamos un nuevo decorador para la función de crear esto implementando @Post
''usualmente se devuelve algo a si"
return {
message: ‘Listado de productos’,
body: {
limit,
offset,
brand,
}
}
Existe otra manera de retornar una respuesta tipo JSON y manejar distintos status de la petición y es con el decorador @Res(),
import { Res} from '@nestjs/common';
@Post('')
postProducto(@Res() res: Response, @Body() payload: any) {
return res.status(HttpStatus.OK).json({
msg: 'Add a new product',
payload,
});
}
claro, en esa petición el estado está de más.
METODO POST
Para utilizarlo en Nest.js debemos importar el decorador
import { Controller, Post } from '@nestjs/common';
y posteriormente crear un end-point
@Post("ruta")
create() {
return {
message: 'acción de crear'
};
}
Pero… que seria del método POST sin el body? un GET? jaja
Para eso importamos el body que es donde se envían los datos
import { Controller, Post, Body } from '@nestjs/common';
Y lo usamos
@Post("ruta")
create(@Body() payload: any) {
return {
message: 'acción de crear',
payload,
};
}
Si me equivoque en algo puedes respóndeme a este aporte
Considero importante mencionar que el precio es un valor que no se debe enviar desde el cliente, esto por temas de seguridad
De acuerdo con la documentacion de NestJS -> Controllers, a la hora de manejar request Post, es una buena practica si definimos un DTO (Data transfer object) para asi tener definido que propiedades y valores podemos esperar el BODY
para crear un DTO puede usar el principio de responsabilidad unica.
// file --> create-product.dto.ts
export class CreateProductDto {
name: string;
price: number;
}
Ahora tendria que importar el dto en su correspondiente controlador e injectarlo en el endpoint por el que fue creado
import { CreateProductDto } from './create-product.dto';
....
@Post()
create(@Body() createOneDto: CreateProductDto) {
return {
Message: 'Create action',
createOneDto,
};
}
fuente: https://docs.nestjs.com/controllers -> Request Payloads section
En lugar de usar el any podemos crear interfaces con campos específicos y asignarlos como el tipo de la variable. Esto hace que lo que nos envíen este estandarizado y de lo contrario no lo leeremos.
Con el método HTTP POST
también se codifica la información, pero ésta se envía a través del body
del HTTP Request
por lo que no aparece en la URL
Para poder crear una ruta con el verbo del HTTP Post tenemos que usar el decorador @post
para esto debemos importarlo:
import { Controller, Post } from '@nestjs/common';
Y luego creamos la ruta muy similar a lo que venimos trabajando:
@Post()
createProduct() {
return 'Estamos atendiendo una solicitud de tipo Post';
}
Lo normal en una solicitud por POST es que el usuario nos mande información, que puede ser variable en función de las necesidades de la aplicación.
Para esto debes hacer uso del decorador @body
importarlo y luego llamarlo en nuestra ruta:
import { Controller, Post, Body } from '@nestjs/common';
@Post()
createProduct(@Body() body) {
return `Creo un producto ${body.name} con descripción ${body.description}`;
}
También podemos recibir parámetro en el body
por su nombre:
Para ello, en el decorador @Body() enviaremos como parámetro el nombre del atributo que vamos a recibir.
@Post()
createProduct(
@Body('name') name: string,
@Body('description') description: string
) {
return `Creo el producto ${name} con descripción ${description}.`;
}
Buenos videos profe, espero ver mas cursos de usted.
La estructura de un Controlador es muy reutilizable para los otros si ponemos getOne en vez de getProduct, create en vez de createProduct, etc. Se me ha hecho igual de complicado crear el primer controlador como crear los 5 siguientes.
Una alternativa para Postman, es usar la consola, con el comando CURL.
https://curl.se/
Creo que lo mejor que debemos hacer en un post, es retornar un 201 en lugar de un objeto
Enviar la data por el @Body (cuerpo del request)
usar protocolo JSON como respuesta
decorador @Post para crear
creando usuarios👀
👏
Solo quería decir que tus recursos son los mejores que he visto hasta ahora en platzi. Información especifica de la clase con anotaciones claras y eliminando lo visto en clases previas. Buen trabajo! 😃
Si lo estas haciendo en Postman, para enviar los datos por post hay clickear donde dice Body y seleccionar la opcion “Raw” y escribir lo mismo que en el video 😄
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.