Friedrich Siever

10. Januar 2024

Nest.js: Request Body, Responses und Status Codes

von: Friedrich Siever | Last Updated: 10.01.24

In diesem Beitrag geht es darum, wie du Input in Form von JSON in Nest.js effektiv nutzen kannst, insbesondere durch den Einsatz des Request Body. Dieser Beitrag baut auf unserem vorherigen Artikel zu den Resource-Controllern in Nest.js auf.

Um den Einstieg zu erleichtern, betrachten wir erneut unseren bisher recht schmalen Controller:

import { Controller, Delete, Get, Param, Patch, Post } from "@nestjs/common";

@Controller("/exhibitions")
export class ExhibitionsController {
  @Get()
  findAll() {}
  @Get(":id")
  findOne(@Param("id") id) {
    return id;
  }
  @Post()
  create() {}
  @Patch(":id")
  update(@Param("id") id) {}
  @Delete(":id")
  remove(@Param("id") id) {}
}

Zwei unserer Aktionen erfordern definitiv eine Form von Input – nämlich create und update.

Der Body Decorator

Mithilfe des Body-Decorators können wir jegliche Art von Input aus dem Body eines Requests an das Aktionsargument übergeben. Falls dieser Input im JSON-Format vorliegt, wird die Variable “input” ein JavaScript-Objekt erhalten. Probieren wir es aus! Passen wir den Controller für “Create” entsprechend an:

import {
  Controller,
  Delete,
  Get,
  Param,
  Patch,
  Post,
  Body,
} from "@nestjs/common";

@Controller("/exhibitions")
export class ExhibitionsController {
  //...
  @Post()
  create(@Body() input) {
    return input;
  }
  // ...
}
nestjs response in insomnia

Natürlich ist es nicht das Ziel dieses Body-Decorators, genau das JSON zurückzugeben, das wir an die API senden. Er ist dazu da, den Inhalt in ein JavaScript-Objekt zu transformieren und damit intelligenter umzugehen, beispielsweise den Input in einer Datenbank zu speichern. Diesen Aspekt werden wir uns zu einem späteren Zeitpunkt genauer ansehen.

In diesem Kontext sind auch die Data Transfer Objects relevant, die ich in einem gesonderten Artikel erklärt habe. Das ist ein cooler Name für typisierte Strukturen, die dazu dienen, den Input deiner Applikation zu verarbeiten.

Responses und Status Codes in Nest.js

Ehrlich gesagt sind Responses in Nest.js super einfach, wie wir bereits in unserem kleinen Beispiel oben gesehen haben. Die ganze Sache funktioniert je nachdem, was unsere Aktion als Rückgabewert liefert.

Primitives

  • Number → Number
  • String → String
  • Boolean → Boolean

JSON

  • Object → JSON
  • Array → JSON

Ein weiteres Beispiel für die Messen

Lass uns noch einmal ein kleines Beispiel für die Messeapplikation erstellen, und zwar konkret für die Aktion findAll().

// ...

@Controller("/exhibitions")
export class ExhibitionsController {
  @Get()
  findAll() {
    return [
      {
        id: 1,
        name: "Werkzeugmesse Hamburg",
        Ort: "Hamburg",
        vom: "2024-05-01",
        bis: "2024-05-07",
      },
      {
        id: 2,
        name: "Metallausstellung Schwerin",
        Ort: "Schwerin",
        vom: "2024-07-03",
        bis: "2024-07-09",
      },
    ];
  }
  // ...
}

Da diese Aktion mit dem HTTP-Verb GET verbunden ist, können wir uns die wundervoll durch Nest.js in JSON transformierten Ergebnisse direkt auf http://localhost:3000/exhibitions anschauen.

nestjs response im json format

Übrigens, wenn du möchtest, dass dein JSON formatiert angezeigt wird, empfehle ich die Browser-Erweiterung JSON Viewer für Chrome, Edge und andere Chromium-basierte Browser. Vergleichbare Erweiterungen gibt es auch für Firefox und Safari.

Aber natürlich sollten wir uns nicht auf die Aufbereitung verlassen. Wir können die Transformation auch durch Überprüfung der Header mittels der Developer Tools im Browser oder durch Insomnia überüfen. Du wirst feststellen, dass die Response als application/json; charset=utf-8 im Header deklariert ist.

Aber natürlich sollten wir uns nicht auf die Aufbereitung verlassen. Wir können die Transformation auch durch Überprüfung der Header mittels der Developer Tools im Browser oder durch Insomnia überüfen. Du wirst feststellen, dass die Response als application/json; charset=utf-8 im Header deklariert ist.

Response Status Codes in Nest.js

Falls du mit HTTP-Statuscodes nicht vertraut bist, empfehle ich dir den Beitrag von Steffen Pfeiffer zu lesen. Dieser bietet eine gute Übersicht in deutscher Sprache.

Nest.js erleichtert uns auch den Umgang mit Statuscodes durch sinnvolle Standardeinstellungen. Bei GET-Anfragen wird normalerweise automatisch der Statuscode 200 angewendet.

Wenn wir eine Resource erstellen, setzt Nest.js standardmäßig den Statuscode auf 201. Dies bedeutet, wenig überraschend, dass etwas erfolgreich erstellt wurde. Bei genauerer Betrachtung unseres obigen Post Requests wirst du feststellen, dass sich Nest.js bereits darum gekümmert hat.

Für PATCH-Aktionen wird hingegen standardmäßig der Statuscode 200 verwendet.

Es ist erwähnenswert, dass es in APIs oft bewährte Praxis ist, die erstellten oder modifizierten Daten mitzuliefern.

Anders verhält es sich beim Löschen von Resourcen. Hier ist es üblich, keine Daten mit zurückzugeben. Die bewährte Praxis ist einfach, außer dem Statuscode nichts zurückzugeben. Hier wird häufig der Statuscode 204 verwendet, was “kein Inhalt” bedeutet. Standardmäßig würde Nest.js hier einen Statuscode 200 zurückgeben, was wir nicht möchten.

Manuelles Ändern eines Statuscodes

Das manuelle Ändern eines HTTP-Statuscodes wird in Nest.js mit dem HttpCode Decorator durchgeführt. Für unsere “remove” Action sieht das folgendermaßen aus:

//...
@Controller("/exhibitions")
export class ExhibitionsController {
  // ...
  @Delete(":id")
  @HttpCode(204)
  remove(@Param("id") id) {}
}

Fazit

In diesem Beitrag haben wir uns ausführlich mit den essenziellen Aspekten der Request- und Response-Verarbeitung in Nest.js beschäftigt. Besonders haben wir den effektiven Umgang mit dem Request Body mithilfe des Body Decorators erkundet. Die Mühelosigkeit, mit der Nest.js die Handhabung von Statuscodes ermöglicht, macht sie zu einem nahtlosen Bestandteil unserer Entwicklungspraxis.

Ich hoffe, dass dieser Artikel nicht nur informativ, sondern auch inspirierend und ermutigend für deine eigene Nest.js-Entwicklung ist. Obwohl die Beispiele noch recht einfach sind, sollen sie dir eine solide Grundlage bieten, um später mit Nest.js das Backend deiner Träume zu entwickeln.

0
0 Bewertungen

Jetzt selbst bewerten