Menu
CoddyTech

Hola, Nest

Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 2 de 24.

En Express, cada ruta es una función que registras manualmente. NestJS asigna una clase propia a cada parte de una API, y los decoradores le indican a Nest qué hace cada clase.

@Controller('books')
export class BooksController {
    @Get()
    findAll() {
        return [{ title: 'Dune' }];
    }
}

Un controlador responde a las solicitudes de una ruta. @Controller('books') y @Get() son decoradores. Un decorador empieza con @ y se coloca en la línea encima de una clase o un método para indicar a Nest para qué sirve. Los decoradores de Nest siempre terminan en (), aunque no contengan nada. Juntos asignan findAll a GET /books, y Nest envía lo que devuelve el método como JSON con el estado 200. Nest nunca envía una solicitud a un método que no tenga un decorador de ruta.

Un módulo enumera las clases que van juntas. src/main.ts llama a NestFactory.create(AppModule); AppModule importa TasksModule, que enumera TasksController. En una computadora portátil, lo iniciarías con npm run start; aquí lo hace Run.

En el código inicial, interface Task describe los campos de un objeto de tarea, y Task[] significa un arreglo de estos. private mantiene un campo dentro de su clase. Un tipo después de los paréntesis de un método describe el valor que devuelve. Estas anotaciones ayudan a TypeScript a comprobar tu código; los decoradores de Nest definen las rutas.

challenge icon

Desafío

Fácil

Tu primer servidor Nest ya contiene tres tareas, pero todavía no hay ninguna ruta que las devuelva. Añade la ruta que las enumera.

  1. Abre src/tasks/tasks.controller.ts. La clase TasksController contiene la lista en this.tasks. @Controller('tasks') sobre la clase la pone a cargo de las rutas bajo /tasks.
  2. Donde está el comentario, añade un método (llámalo findAll) y márcalo con @Get(). Devuelve this.tasks. Nest envía como JSON lo que devuelve el método, con estado 200.
  3. Get viene de @nestjs/common, igual que Controller. Añádelo a la importación de la primera línea.

Pruébalo: pulsa «Jugar» y después envía GET /tasks. Obtendrás 200 y las tres tareas:

[
  { "id": 1, "title": "Write the README", "done": true },
  { "id": 2, "title": "Fix the login bug", "done": false },
  { "id": 3, "title": "Plan the sprint", "done": false }
]

Después envía GET /task, sin la s. Ninguna ruta coincide con esa ruta, así que Nest responde con 404:

{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }

Pruébalo tú mismo

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

interface Task {
    id: number;
    title: string;
    done: boolean;
}

@Controller('tasks')
export class TasksController {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true },
        { id: 2, title: 'Fix the login bug', done: false },
        { id: 3, title: 'Plan the sprint', done: false },
    ];

    // Añade aquí un método que responda a GET /tasks con la lista.
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de TypeScript y NestJS

Practica por tu cuenta: Playground de Express