Parámetros de ruta
Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 4 de 24.
Un cliente suele necesitar una tarea, no la lista completa. Una ruta puede contener un parámetro: una parte que cambia de una solicitud a otra.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn coincide con cualquier valor en esa parte de la ruta, así que GET /books/978 llega a este método. @Param('isbn') le pasa ese valor al método. Siempre es texto: /books/42 devuelve la cadena '42', nunca el número 42.
Si omites el nombre, @Param() devuelve el objeto con todos los parámetros, { isbn: '978' }, en lugar del valor.
Desafío
FácilUn cliente suele querer una sola tarea, no la lista completa. Añade una ruta que devuelva una tarea por su id.
- En
src/tasks/tasks.controller.ts, añade un segundo método aTasksController(llámalofindOne) paraGET /tasks/:id.:idrepresenta cualquier valor en esa posición de la ruta, así que/tasks/2llega a él. - Lee el id de la ruta con
@Param('id'). ImportaParamde@nestjs/common. - El id llega como texto, como
"2", pero los id dethis.tasksson números, y"2" === 2es falso. Convierte el id en un número antes de compararlo. - Devuelve la tarea con ese id.
- Deja
GET /taskstal como está: sigue devolviendo la lista completa.
Pruébalo: envía GET /tasks/2. Obtienes 200 y:
{ "id": 2, "title": "Fix the login bug", "done": false }Envía también GET /tasks/1 y GET /tasks/3. Después, envía GET /tasks/99. Ninguna tarea tiene ese id, así que tu método no devuelve nada y Nest responde con 200 y un cuerpo vacío. Por ahora, esto es lo esperado. No le dice nada al cliente; una lección posterior lo corregirá.
Pruébalo tú mismo
import { Controller, Get } 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 },
];
@Get()
findAll(): Task[] {
return this.tasks;
}
}
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