Menu
CoddyTech

Ciao, Nest

Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 2 di 24.

In Express ogni route è una funzione che registri manualmente. NestJS assegna a ogni parte di un'API una propria classe, e i decorator indicano a Nest cosa fa ogni classe.

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

Un controller risponde alle richieste per un percorso. @Controller('books') e @Get() sono decorator. Un decorator inizia con @ e si trova sulla riga sopra una classe o un metodo, indicando a Nest a cosa serve. I decorator di Nest terminano sempre con (), anche quando non contengono nulla. Insieme associano findAll a GET /books e Nest invia come JSON il valore restituito dal metodo, con stato 200. Nest non invia mai una richiesta a un metodo che non ha un decorator di route.

Un modulo elenca le classi che appartengono allo stesso gruppo. src/main.ts chiama NestFactory.create(AppModule); AppModule importa TasksModule, che elenca TasksController. Su un laptop lo avvieresti con npm run start; qui lo fa Run.

Nello starter, interface Task descrive i campi di un oggetto task e Task[] indica un array di questi oggetti. private mantiene un campo all'interno della sua classe. Un tipo dopo le parentesi di un metodo descrive il valore restituito. Queste annotazioni aiutano TypeScript a controllare il tuo codice; i decorator di Nest definiscono le route.

challenge icon

Sfida

Facile

Il tuo primo server Nest contiene già tre attività, ma non c'è ancora alcuna route che le restituisca. Aggiungi la route che le elenca.

  1. Apri src/tasks/tasks.controller.ts. La classe TasksController contiene l'elenco in this.tasks. @Controller('tasks') sopra la classe la mette a capo dei percorsi sotto /tasks.
  2. Nel punto in cui si trova il commento, aggiungi un metodo (chiamalo findAll) e contrassegnalo con @Get(). Restituisce this.tasks. Nest invia come JSON ciò che il metodo restituisce, con stato 200.
  3. Get proviene da @nestjs/common, come Controller. Aggiungilo all'import nella prima riga.

Prova: premi Run, poi invia GET /tasks. Ottieni 200 e le tre attività:

[
  { "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 }
]

Quindi invia GET /task, senza la s. Nessuna route corrisponde a quel percorso, quindi Nest risponde con 404:

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

Provalo tu

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 },
    ];

    // Aggiungi qui un metodo che risponda a GET /tasks con la lista.
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di TypeScript e NestJS

Esercitati da solo: Playground Express