Skip to content

Instantly share code, notes, and snippets.

@intelguasoft
Last active April 3, 2020 06:08
Show Gist options
  • Select an option

  • Save intelguasoft/c8ccdc66cd3ceeb667bc670de798a870 to your computer and use it in GitHub Desktop.

Select an option

Save intelguasoft/c8ccdc66cd3ceeb667bc670de798a870 to your computer and use it in GitHub Desktop.
Todo lo referente a los controladores en NestJS...

Controladores NestJS inmersión profunda

Explore el controlador; La parte más importante de NestJS

En esta publicación, exploraremos el controlador, que es la parte más importante de NestJS.


Por qué necesitamos controladores

Los controladores son responsables de manejar las solicitudes enviadas al servidor, los controladores exponen múltiples endpoints donde los clientes pueden enviar la solicitud. Cada endpoint se identifica mediante un método HTTP también conocido como verbo HTTP.

Verbos HTTP

  • GET: El método GET se usa para obtener los datos del servidor, puede ser un recurso único o múltiples recursos. También podemos pasar algunos parámetros que se pueden usar para filtrar los recursos.

  • POST: El método POST se usa cuando queremos crear algunos recursos en el servidor. También podemos usar solicitudes POST en los casos en que queramos filtrar algunos recursos en función de la información enviada al servidor, por ejemplo, proporcionando un filtro avanzado.

  • PUT: El método PUT se usa para actualizar los recursos en el servidor. En el método PUT, esperamos que se actualicen los datos que enviemos.

  • PATCH: El método PATCH se usa cuando solo queremos modificar, no reemplazar todos los valores en el servidor.

  • DELETE: El método DELETE se usa cuando queremos eliminar algunos recursos del servidor.

Código de estado HTTP

Otra cosa que debe tener en cuenta son los códigos de estado HTTP. Puede consultar la documentación de Mozilla para ver la lista de códigos de estado. El método POST devuelve 201 como código de estado en éxito, otros métodos devuelven 200 como código de estado.


Creando nuestro primer controlador

La imagen de arriba muestra un ProductController que tomará las solicitudes del cliente y la solicitud es manejada por uno de los endpoints/métodos definidos. Un método HTTP puede recibir una solicitud HTTP y devolver una respuesta HTTP en forma de JSON, XML, archivos o texto.

Para crear un controlador, podemos usar la CLI de Nest, en nuestra aplicación ya tenemos un controlador disponible, crearemos uno nuevo llamado product, ejecute el siguiente comando para crear.

nest generate controller product -p default

El indicador -p se asegurará de que el controlador esté creado en la aplicación predeterminada (default); de lo contrario, puede pasar el nombre product donde desea crear el controlador.

Una vez que se ejecuta el comando, notará dos nuevos archivos.

  • product.controller.ts
  • product.controller.spec.ts (para pruebas unitarias)

Necesitamos escribir nuestro código en product.controller.ts. Si abre este archivo, encontrará el siguiente código.

import { Controller } from "@nestjs/common";

@Controller("product")
export class ProductController {}
  • @Controller(): el decorador para controlador se agrega sobre la clase ProductController. Si viene desde .Net o Java, ha utilizado uno al crear un API web. Se necesita un parámetro donde puede pasar el endpoint/ruta donde se puede enviar la solicitud.

Añadiendo nuestro primer método

Agreguemos nuestro primer método Get() que devolverá un producto filtrado por su id. Crearemos una lista ficticia de productos, veremos la integración de la base de datos en uno de los próximos artículos.

Abra product.controller.ts y agregue el siguiente código:

import { Controller, Get, Param } from "@nestjs/common";

@Controller("products")
export class ProductController {
  products = [
    {
      id: "6c3bf8af-d30a-41cf-a589-4d9013a5ac6c",
      name: "Sour Puss Raspberry",
      description:
        "tincidunt ante vel ipsum praesent blandit lacinia erat vestibulum sed magna",
      price: "130.09"
    },
    {
      id: "b801d825-e18e-4bcf-922b-a7f3c77b8120",
      name: "Pear - Packum",
      description:
        "sed ante vivamus tortor duis mattis egestas metus aenean fermentum donec",
      price: "346.88"
    },
    {
      id: "d4ac2d37-a836-4499-b27d-57066db43e68",
      name: "French Kiss Vanilla",
      description:
        "hac habitasse platea dictumst aliquam augue quam sollicitudin vitae consectetuer eget rutrum at lorem integer",
      price: "768.83"
    },
    {
      id: "5c3d4106-9f76-47f6-821e-8d223fedc157",
      name: "Sauce - Alfredo",
      description:
        "quam fringilla rhoncus mauris enim leo rhoncus sed vestibulum sit amet",
      price: "664.76"
    },
    {
      id: "ff7b2867-d59e-42c5-b470-39578aa46f46",
      name: "Hipnotiq Liquor",
      description:
        "turpis enim blandit mi in porttitor pede justo eu massa donec",
      price: "918.52"
    }
  ];

  @Get()
  getAll() {
    return this.products;
  }
}

El código resaltado es lo que hemos agregado para crear nuestro método Get().

  • @Get: el decorador Get aquí especifica que cuando un cliente envía una solicitud en https://endpoint/products con el método Get HTTP, se llamará a getAll().

Adelante, pruébalo. Inicie el servidor usando el comando npm run start:dev que ejecutará nuestro servidor en modo de observación y detectará cambios cada vez que realicemos algún cambio en nuestro código.

Ingrese http://localhost:3000/products en su navegador, las llamadas se pueden activar a través del navegador.


Agregar método Post

El código resaltado se agrega para el método Post y el resto del código sigue siendo el mismo.

@Post()
store(@Body() data: Request) {
  const product = {
    id: uuidv4()
  }
  this.products.push(req.body);
  return req.body.id;
}
  • @Post: El decorador de Post debe definir el método store(). Será iniciado por un cliente cuando se realice una solicitud a https://endpoint/products con el método Post. El método Post no pueden iniciarse usando el navegador, necesitamos un cliente, yo uso Insomnia para las pruebas.

  • @Req: podemos obtener acceso al objeto de solicitud HTTP. Puede obtener acceso al cuerpo (en este caso asociado al decorador @Body que lo maneja como un objeto), encabezados y otros parámetros de solicitud.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment