Node.js kann mit seiner zu bietenden Flexibilität und recht freien „Syntax“ (missing strict guidlines?!) ziemlich überwältigend für Anfänger wirken.
Deshalb soll dieses Tutorial eine schnelle und einfache Einführung in Node.js, dem Express Framework und der NoSQL Datenbank (MongoDB) bieten.
Unser Fokus wird dabei auf der Erstellung Grundlegender REST Endpunkte sowie simple Datenbank Interkationen liegen. Diese legen den Grundstein/Fundament auf denen man aufbauen kann.
Wichtig hierbei ist: Dass du Grundkenntnisse über REST, CRUD und Javascript bzw. ECMAScript besitzt.
Hierfür werden wir ein Backend schreiben, welches Bücher verwalten kann.
Projekt Setup
Wenn du noch nicht Node installiert hast, schau dir das an.
Leg einen neuen Ordner für unser Projekt an und führe über die Bash auf diesen Ordner diesen Befehl aus:
npm init
Wenn das erledigt ist, solltest du eine package.json in diesem Ordner besitzen. Das bedeutet, dass wir nun die Möglichkeit haben unserem Projekt via NPM, Module hinzuzufügen.
Dazu führen wir diesen Befehl aus:
npm i express mongoose
Hiermit haben wir uns das Express Framework und Mongoose Module unserem Projekt hinzugefügt.
Express ist ein Framework, dass uns ungemein dabei hilft schnell ein Backend auf die Beine zu stellen.
Mongoose hingegen baut auf den MongoDB Treiber auf um Modelbasiert Datenbankanfragen zu stellen.
Zusätzlich empfehle ich nodemon Global zu installieren. Hierdurch lässt sich nodemon nicht nur in einem Projekt verwenden sondern auch in zukünftigen.
npm i -g nodemon
Nodemon überwacht unser Projekt auf Änderungen und startet dieses automatisch neu, ohne jegliches zu tun.
So in etwa sollte dann deine package.json aussehen:
Unser Server
Zunächst einmal binden wir alle benötigten Module in unsere index.js ein.
Als nächstes benötigen wir noch eine Instanz von Express und weisen dieser einen Port zu auf dem der Server HTTP Anfragen annimmt.
Wenn wir nun nodemon ausführen bzw. npm run dev oder node index.js, können wir in der Konsole sehen, dass der Server auf unserem gewünschten Port live gegangen ist.
Können tut er leider noch nichts, deshalb lass uns nun ein paar Endpunkte hinzufügen.
CRUD Endpunkte
Jetzt sind wir so weit Endpunkte unserem Server hinzuzufügen. Wir werden zum Schluss die Möglichkeit haben Bücher hinzuzufügen, zu entfernen, zu lesen und Ihre Daten up zu daten.
Hiermit soll ein ein Grundverständnis der Routing Struktur von Node vermittelt werden.
Um unsere Endpunkte bzw. API´s zu testen, werden wir eine Applikation verwenden die sich Postman nennt. Mithilfe von Postman lässt sich schnell und einfach verschiedenste HTTP Request an einen Server zu schicken.
Hier geht es zu Postman
Projektstruktur
Auch wenn wir nur eine kleine Applikation schreiben sollten wir lernen eine gewisse Übersicht zu bewahren. Deshalb werden wir unser Projekt so strukturieren, dass unsere Routen (Endpunkte) und Models jeweils in einem eigenen Verzeichnis liegen.
Das C in CRUD
Lass uns nun eine Create Route erstellen um ein Buch anlegen zu klönnen.
Dazu legen wir eine book.js unter routes an.
So in etwa:
Wir machen nichts anderes als Express zu sagen, dass wir unter der URI /book einen POST Request entgegen nehmen möchten und geben bei einer Erfolgreichen Anfrage ein Request (req) Objekt (welche Daten vom Client enthält) so wie ein Response Objekt(res) in die Callback Funktion. Wir verwenden das Response Objekt um einen HTTP Status Code 200, welcher so viel bedeutet wie alles OK, und ein kleines „Hello World“ zurück geben zu können.
Als letztes müssen wir noch unsere Route unserer Express instanz bekannt machen. Deshalb exportieren wir unser api Objekt und binden diese so ein:
Lass uns diese nun mithilfe Postman testen.
Cool! Wir haben unsere erste Route erstellt.
Als nächstes lass uns ein paar Parameter mitgeben und diese in unserer API verarbeiten und in schließlich in unserer Datenbank anlegen
Request Parameter
Versuchen wir einfach mal in Postman unter x-www-form-urlencoded im Body ein paar Key-Value´s mitgeben.
Durch den Content-Type x-www-form-urlencoded ist es uns möglich die mitgelieferten Daten zu auf unserem Server zu verarbeiten.
(Bild Postman Key-Value)
In unserem Server wollen wir erstmal den mitgelieferten Body ausgegeben haben wollen:
Autsch! wir bekommen nur ein ‚undefined‘ zurück…
Das liegt daran, dass Express von Haus aus keine URL encoded Forms verarbeiten kann.
Deshalb müssen wir noch den bodyParser in unserer index.js mit einbinden.
Aber zuerst einmal „npm i body-parser“ in die Bash
Jetzt sollten wir, wenn wir noch einmal einen Request an den Server schicken, unsere mitgelieferten Daten ausgegeben bekommen.
Nun zur Datenbank
Ich gehe davon aus, dass die MongoDB bereits installiert ist.
Dazu legen wir uns einen config Ordner an und legen unsere Datenbank URL in einer config.js ab.
In dieser können wir auch unseren Port für den Server hinterlegen.
In unserer index.js müssen wir nun mithilfe mongoose die Datenbank verbindung aufbauen.
Das würde so aussehen:
Datenbank
Datenbank Model
Mit Mongoose können wir angeben wie unser Buch Schema in unserer Datenbank aussehen soll.
Um schließlich unsere Daten in die Datenbank ablegen zu können. Erstellen wir ein Objekt dieses Mongoose Buch Models und können darauf die speicher Funktion aufrufen.
Zusätzlich übergeben wir der .save Funktion einen weiteren Parameter, den wir loggen. Dadurch können wir sehen wie unser Buch Objekt in der Datenbank abgelegt worden ist.
Die anderen CRUD Operatoren
Nun möchten wir ein Buch aus unserer Datenbank lesen bzw. zurückliefern. Dazu bietet sich die findById() Methode von Mongoose an.
Dazu nehmen wir die einzigartige ObjectId, welche jeder Datensatz in MongoDB erhält
und wenn wir alle Bücher zurückliefern möchten übergeben wir nichts:
wesentlich unterscheiden tun sich die Methoden zum updaten und löschen von Büchern nicht von den anderen
Fertig!
Wir haben nun eine Funktionierenden Node Server welcher die wesentlichen CRUD Methoden unterstützt.
Dieses Tutorial war dazu da, um dir Express, Node und MongoDB näher zu bringen. Diese App die wir gemeinsam erstellt haben, kannst du nun als Sprungbrett für komplexere Applikationen verwenden.
Danke für´s lesen 🙂