Menu
CoddyTech

Hallo, Nest

Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 2 von 24.

In Express ist jede Route eine Funktion, die du manuell registrierst. NestJS gibt jedem Teil einer API eine eigene Klasse, und Dekoratoren teilen Nest mit, was jede Klasse macht.

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

Ein Controller beantwortet Anfragen für einen Pfad. @Controller('books') und @Get() sind Dekoratoren. Ein Dekorator beginnt mit @ und steht in der Zeile über einer Klasse oder Methode. So teilt er Nest mit, wofür sie da ist. Die Dekoratoren von Nest enden immer mit (), auch wenn darin nichts steht. Zusammen ordnen sie findAll dem Pfad GET /books zu, und Nest sendet den Rückgabewert der Methode als JSON mit dem Status 200. Nest sendet niemals eine Anfrage an eine Methode, die keinen Routendekorator hat.

Ein Modul listet die Klassen auf, die zusammengehören. src/main.ts ruft NestFactory.create(AppModule) auf; AppModule importiert TasksModule, in dem TasksController aufgeführt ist. Auf einem Laptop würdest du es mit npm run start starten; hier übernimmt Run das.

Im Starter beschreibt interface Task die Felder eines Task-Objekts, und Task[] bedeutet ein Array davon. private hält ein Feld innerhalb seiner Klasse. Ein Typ nach den Klammern einer Methode beschreibt ihren Rückgabewert. Diese Annotationen helfen TypeScript, deinen Code zu überprüfen; Nest-Dekoratoren definieren die Routen.

challenge icon

Aufgabe

Einfach

Dein erster Nest-Server enthält bereits drei Aufgaben, aber noch keine Route gibt sie zurück. Füge die Route hinzu, die sie auflistet.

  1. Öffne src/tasks/tasks.controller.ts. Die Klasse TasksController enthält die Liste in this.tasks. @Controller('tasks') über der Klasse weist ihr die Zuständigkeit für Pfade unter /tasks zu.
  2. Füge anstelle des Kommentars eine Methode hinzu (nenne sie findAll) und versehe sie mit @Get(). Sie gibt this.tasks zurück. Nest sendet den Rückgabewert der Methode als JSON mit dem Statuscode 200.
  3. Get stammt wie Controller aus @nestjs/common. Füge es zum Import in der ersten Zeile hinzu.

Probiere es aus: Drücke auf „Ausführen“ und sende dann GET /tasks. Du erhältst den Statuscode 200 und die drei Aufgaben:

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

Sende dann GET /task, ohne das s. Keine Route entspricht diesem Pfad, daher antwortet Nest mit dem Statuscode 404:

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

Probier es selbst

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

    // Füge hier eine Methode hinzu, die auf GET /tasks mit der Liste antwortet.
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in TypeScript und NestJS

Übe selbstständig: Express-Playground