Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

POST: método para crear

11/23
Recursos
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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

  • Es el método para creación de datos

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.

Método Post


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

  • El método POST no tiene límite de cantidad de información a enviar.
  • La información proporcionada no es visible, por lo que se puede enviar información sensible.
  • Se puede usar para enviar texto normal así como datos binarios (archivos, imágenes…).

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 😄