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.
Aufgabe
EinfachDein erster Nest-Server enthält bereits drei Aufgaben, aber noch keine Route gibt sie zurück. Füge die Route hinzu, die sie auflistet.
- Öffne
src/tasks/tasks.controller.ts. Die KlasseTasksControllerenthält die Liste inthis.tasks.@Controller('tasks')über der Klasse weist ihr die Zuständigkeit für Pfade unter/taskszu. - Füge anstelle des Kommentars eine Methode hinzu (nenne sie
findAll) und versehe sie mit@Get(). Sie gibtthis.taskszurück. Nest sendet den Rückgabewert der Methode als JSON mit dem Statuscode 200. Getstammt wieControlleraus@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.
}
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
1Nest-Grundlagen
Klassen und MethodenHallo, NestEinen Controller registrieren4Guards, Filter und Interceptors
GuardsÜbe selbstständig: Express-Playground