Friedrich Siever

11. Januar 2024

Die Schlüsselrolle der Controller in Nest.js: Ein umfassender Leitfaden

von: Friedrich Siever | Last Updated: 11.01.24

Nest.js Controller: Einblicke und Grundlagen

Um die Welt der Nest.js-Controller zu verstehen, beginnen wir mit den Grundlagen. Zentral dabei ist das Routing, das festlegt, welcher Code für welche Route ausgeführt wird. Routen setzen sich typischerweise aus einem HTTP-Verb und einem Pfad zusammen. Verben wie GET und POST kombinieren sich mit Pfaden wie /user oder /posts-by-user.

Beispielhafte Routen:

  • GET /user
  • POST /user
  • GET /user/:id (Hier ist “id” ein Parameter)
  • GET /posts-by-user

Sobald eine Route getroffen wird, tritt ein Controller in Aktion. Genauer gesagt, wird eine Controller-Aktion ausgeführt. Ein Controller ist im Wesentlichen eine Klasse, die verschiedene Aktionen enthält. Diese Aktionen werden als Reaktion auf das Matching von Routen ausgeführt.

Lassen Sie uns tiefer in die Grundlagen der Nest.js-Controller eintauchen und verstehen, wie sie die Struktur und Funktionalität unserer Anwendungen beeinflussen.

Man kann sich das wie die Schnittstelle zu der Applikation zu Deinen API-Endpunkten vorstellen.

Controller können ihrerseits wiederum andere Klassen wie Services, Repositories und andere Dinge nutzen, wie wir später noch genauer sehen werden.

Optional können diese Klassen etwas an den Controller zurückgeben. Der Controller hat dann in der Regel die Aufgabe, mit Daten auf den Request zu antworten. Für gewöhnlich handelt es sich hierbei um JSON-Daten.

Controller in Nest.js

Nach der Theorie werfen wir nun einen Blick in den praktischen Code. Ein Standard-Controller in Nest.js sieht wie folgt aus:

// src/app.controller.ts
import { Controller, Get } from "@nestjs/common";
import { AppService } from "./app.service";

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

Ein Controller ist also eine mit dem @Controller-Dekorator gekennzeichnete Klasse. Controller verfügen über Aktionen (Methoden), die mit einem spezifischen Pfad und einem HTTP-Verb (GET, POST, usw.) verknüpft sind.

Die Hauptaufgabe eines Controllers besteht darin, Endpoints für die Anwendung zu erstellen. Dafür benötigen sie einen Pfad und ein HTTP-Verb. Basierend auf der Anfrage leitet der Controller die Verarbeitung an andere Teile des Codes deiner Anwendung weiter. Schließlich wird eine Response an den Client zurückgegeben.

Dies erklärt auch den Namen “Controller”. Im Englischen bedeutet “to control” soviel wie steuern. Der Controller steuert den Prozess, wie mit einem Request umgegangen wird.

Routing

Wie erwähnt müssen wir einer nest.js app erklären, wie sie einen Pfad in Controller und die verbundenen Aktionen übersetzt. Dieser Vorgang wird als Routing bezeichnet. Es gibt verschiedene Möglichkeiten, wie Du das anstellen kannst.

Path Prefix

Allen Aktionen in einem Controller kann ein Pfadpräfix zugewiesen werden. Dieser Pfadparameter kann entweder ein einfacher String wie z.B. /user sein oder in einem Objekt spezifiziert werden.

Beispiel mit String-Präfix:

// src/app.controller.ts
// ...
@Controller("/user")
export class AppController {
  constructor(private readonly appService: AppService) {}
  // ...
}

Beispiel mit Objekt-Präfix:

// src/app.controller.ts
// ...
@Controller({ path: "/user" })
export class AppController {
  constructor(private readonly appService: AppService) {}
  // ...
}

Wenn wir keinen Prefix definieren, entspricht dies im Grunde einem “top-level” Pfad. In der Praxis könnten wir unseren bisherigen Controller wie folgt erweitern:

import { Controller, Get } from "@nestjs/common";
import { AppService } from "./app.service";

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

  @Get("/bye")
  getBye() {
    return "Auf Wiedersehen";
  }
}

Auch wenn dies möglicherweise noch nicht besonders nützlich erscheint, war es ein wichtiger Schritt, um sicherzustellen, dass alles funktioniert.

Jetzt kannst du http://localhost:3000/bye aufrufen. Herzlichen Glückwunsch, du hast erfolgreich deine erste API-Route mit einem Controller erstellt!

Fazit

Die Controller spielen in Nest.js eine herausragende Rolle in der Verarbeitung von Requests und bilden das Herzstück der Anwendungslogik.

  • In Nest.js übernehmen Controller die Verarbeitung von Requests.
  • Controller sind Klassen, die Methoden beinhalten, auch als Aktionen (Actions) bekannt.
  • Eine Controller-Klasse wird durch den @Controller-Dekorator gekennzeichnet.
  • Der @Controller-Dekorator kann auch genutzt werden, um einen Pfad-Präfix zu definieren.
  • HTTP-Verb-Dekoratoren wie @Get oder @Post kommen zum Einsatz, um spezifische Aktionen zu markieren.
  • Diese Dekoratoren entsprechen dem HTTP-Verb des entsprechenden Pfades.
  • Die Erzeugung der Response sollte vorzugsweise in einer Controller-Action-Methode erfolgen.
0
0 Bewertungen

Jetzt selbst bewerten