Als Frontend-Entwickler möchte ich sagen, dass das NestJs Framework die beste Wahl war, um mit dem Backend-Teil der Anwendungen zu beginnen. Ich habe meinen Tutor bei Apiumhub immer nach Designmustern, sauberer Architektur und Microservices gefragt. Dann zeigte er mir den Link zur vollständigen und sehr gut strukturierten Dokumentation von NestJs. Es war eine gute Entdeckung für mich, mich auf dieser Seite zu verlieren und etwas über Dekoratoren, Anbieter, Abhängigkeitsinjektion, Tests, Authentifizierung und weitere Themen aus verschiedenen Bereichen zu lernen.
Was ist NestJs?
Zunächst einmal: Was ist NestJs? Es handelt sich um ein Open-Source- Node.js-Framework für die Entwicklung anspruchsvoller Backend-Systeme, die das Design-Paradigma „ Convention over Configuration“ verwenden . Dadurch entfällt die Notwendigkeit einer expliziten Konfiguration, da Entwickler gängige Tools und Codes auf eine bestimmte Weise verwenden können.
Sie können skalierbare, testbare und lose gekoppelte Anwendungen erstellen. Es ist stark von Angular beeinflusst und ein wichtiges Merkmal ist die Leistungsfähigkeit der Abhängigkeitseinspritzung, die das Einfügen eines Moduls in ein anderes ermöglicht und so die Wiederverwendung von Code fördert.
Was bietet NestJs und welche Vorteile bietet seine Verwendung?
NestJs wurde sowohl für Monolithen als auch für Microservices entwickelt. Sie können Rest-APIs, MVC-Anwendungen, GraphQL-Anwendungen, Web Sockets oder CLIs sowie CRON-Jobs erstellen.
Da Nest-Anwendungen in TypeScript geschrieben sind, schützt die Fehlererkennung zur Kompilierungszeit unseren Code und vermeidet Fehler beim Schreiben zahlreicher Microservices, die alle denselben Antwortmodus haben.
NestJS ermöglicht die Erstellung herausragender, gut organisierter und leichter Microservices. Aufgrund der von NestJs vorgegebenen Struktur müssen Entwickler Controller, Service und Repository an bestimmten Orten und auf eine bestimmte Weise schreiben. Dies verbessert den Entwicklungsprozess, da es Fehler verhindert, die später zu einem hohen Aufwand bei der Umstrukturierung der Codebasis führen könnten, und ermöglicht es, mehr Aufmerksamkeit auf das Design der Endpunkte als auf die Anwendungsstruktur zu richten.
Es verfügt über ein nützliches Befehlszeilenschnittstellentool namens NestCLI, das die Generierung des Boilercodes (Module, Middleware, Controller usw.) erleichtert. Außerdem sind TypeScript-, Prettier- und Eslint-Konfigurationen vollständig mit NestJS eingerichtet.
Es bietet Integration mit Jest und Supertest und erleichtert durch sein Abhängigkeitsinjektionssystem das Mocking von Komponenten in der Testumgebung.
Die Dokumentation von NestJs ist eine der gründlichsten und verständlichsten. Durch schnelles Überfliegen der Dokumentation können Sie die Antwort auf Ihren Fehler finden und den Zeitaufwand für die Fehlerbehebung verkürzen.
Grundlegende Konzepte von NestJs
Dekorateure
Ein Dekorator ist ein Ausdruck, der drei Argumente akzeptiert: ein Ziel, einen Namen und einen Eigenschaftsdeskriptor und eine Funktion zurückgibt. Sie wenden ihn an, indem Sie den Dekorator ganz oben in das Objekt einfügen, das Sie dekorieren möchten, gefolgt vom @-Zeichen. Es gibt drei verschiedene Dekoratoren: Klasse ( @Controller() ), Methode ( @Get() ) oder Argument ( @Body() ).
In NestJs kann alles mit Dekoratoren gesteuert werden. Sie können einen Controller mit einer Sammlung von Routen verbinden, eine Anforderungsmethode angeben, Anforderungstextinhalte hinzufügen oder Anforderungsparameter analysieren. Sie können auch Ihre eigenen benutzerdefinierten Dekoratoren erstellen, die Sie in Ihrem Projekt verwenden können. Wie im NestJs-Dokumentationsbeispiel:
Controller
Controller verarbeiten eingehende Anfragen und geben Antworten an den Client zurück. Sie können eine URL als Hauptroute für diesen Controller und einen Methodendekorator wie @Get, @Post, @Put oder @Delete mit dem @Controller-Dekorator angeben.
Anbieter
Anbieter sind ein wesentliches Konzept in NestJs. Die Kernklassen von Nest, wie Dienste (verwalten Datenzugriff und Geschäftslogik), Repositories (verwalten den Zugriff auf eine Datenbank), Fabriken usw., können als Anbieter betrachtet werden. Es ist möglich, neue Anbieter zu erstellen und sie in Controller oder vorhandene Anbieter einzufügen. Beispielsweise wird ein Dienstanbieter mit dem Dekorator @Injectable verwendet, der Metadaten hinzufügt und deklariert, dass dieser Dienst vom Nest IoC-Container verwaltet werden kann. Nest IoC verwaltet Interaktionen zwischen Anbietern.
Module
Module sind die grundlegenden Bausteine der Nest-Anwendungen. Das AppModule wird automatisch eingebunden, wenn Sie eine Nest-Anwendung erstellen. Um Ihre Komponenten effektiv anzuordnen, empfiehlt es sich, jede Ihrer Funktionen in einem Modul zu gruppieren.
Standardmäßig enthält das Modul Anbieter. Daher können Anbieter, die weder direkt Teil des aktuellen Moduls sind noch direkt aus den importierten Modulen exportiert werden, nicht eingefügt werden.
Rohre
Pipes haben zwei gängige Verwendungszwecke: die Umwandlung der Eingabedaten in die gewünschte Form und ihre Validierung, um bei Ungültigkeit eine Ausnahme auszulösen.
Wachen
Guards entscheiden, ob eine bestimmte Anfrage vom Routenhandler verarbeitet wird oder nicht, abhängig von bestimmten Laufzeitbedingungen. Sie helfen dabei, die Authentifizierungs- und Autorisierungslogik einfach einzurichten htmx.
Fazit
In diesem Artikel haben wir einige der wichtigsten Ideen von NestJs zusammengefasst. Mit NestJs können Sie domänenweise klare Grenzen konstruieren, wiederverwendbare Module schreiben und lose gekoppelten und wartbaren Code schreiben. Es ist unglaublich, wie viele Dekoratoren in diesem Framework verfügbar sind, um verschiedene Funktionen auszuführen, die nur minimale oder gar keine Codierung erfordern. Darüber hinaus macht es die Abhängigkeitsinjektion einfach, Dienste zu simulieren, beispielsweise in Ihren Controllertests.