Parametri di route
Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 4 di 24.
Spesso un client ha bisogno di un'attività, non dell'intero elenco. Un percorso può contenere un parametro: una parte che cambia da una richiesta all'altra.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn corrisponde a qualsiasi valore in quella posizione del percorso, quindi GET /books/978 raggiunge questo metodo. @Param('isbn') passa quel valore al metodo. È sempre testo: /books/42 restituisce la stringa '42', mai il numero 42.
Se ometti il nome, @Param() restituisce l'oggetto con tutti i parametri, { isbn: '978' }, anziché il valore.
Sfida
FacileSpesso un client vuole una sola attività, non l’intero elenco. Aggiungi una route che restituisca un’attività in base al suo id.
- In
src/tasks/tasks.controller.ts, aggiungi un secondo metodo aTasksController(chiamalofindOne) perGET /tasks/:id.:idrappresenta qualsiasi valore in quella posizione del percorso, quindi/tasks/2lo raggiunge. - Leggi l’id dal percorso con
@Param('id'). ImportaParamda@nestjs/common. - L’id arriva come testo, come
"2", ma gli id inthis.taskssono numeri, e"2" === 2è false. Converti l’id in un numero prima di confrontarlo. - Restituisci l’attività con quell’id.
- Lascia
GET /taskscosì com’è: continua a restituire l’intero elenco.
Prova: invia GET /tasks/2. Ottieni 200 e:
{ "id": 2, "title": "Fix the login bug", "done": false }Invia anche GET /tasks/1 e GET /tasks/3. Poi invia GET /tasks/99. Nessuna attività ha quell’id, quindi il tuo metodo non restituisce nulla e Nest risponde con 200 e un corpo vuoto. Per ora è previsto. Non fornisce informazioni al client, ma una lezione successiva risolve il problema.
Provalo tu
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;
}
}
Tutte le lezioni di TypeScript e NestJS
1Basi di Nest
Classi e metodiCiao, NestRegistrare un controller4Guardie, filtri e intercettori
GuardieEsercitati da solo: Playground Express