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.
Desafío
FácilTu primer servidor Nest ya contiene tres tareas, pero todavía no hay ninguna ruta que las devuelva. Añade la ruta que las enumera.
- Abre
src/tasks/tasks.controller.ts. La claseTasksControllercontiene la lista enthis.tasks.@Controller('tasks')sobre la clase la pone a cargo de las rutas bajo/tasks. - Donde está el comentario, añade un método (llámalo
findAll) y márcalo con@Get(). Devuelvethis.tasks. Nest envía como JSON lo que devuelve el método, con estado 200. Getviene de@nestjs/common, igual queController. 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.
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de TypeScript y NestJS
1Fundamentos de Nest
Clases y métodosHola, NestRegistro de un controlador4Guards, filtros e interceptores
GuardsPractica por tu cuenta: Playground de Express