Nodejs-Tutorial Teil 4: Anbindung des Logins an MongoDB

Posted by in JavaScript, Nodejs

In Teil 3 haben wir uns mit der grundlegenden Funktionalität von Express und Jade beschäftigt und außerdem gelernt, wie man Requests routet. Nachdem wir ein rudimentäres Logintemplate gebaut haben, wollen wir uns natürlich einloggen. Dafür brauchen wir eine Datenbank, die Benutzer speichern kann. Dafür eignet sich MongoDB ganz besonders, da sie komplett auf dem Datenformat JSON aufbaut. Also auf gehts!

Was ist MongoDB

MongoDB ist ein Vertreter der NoSQL-Zunft und damit in der Lage ohne erzwungenes Schema Daten zu speichern. Was aber nicht heißen muss, dass unsere Daten keine Struktur haben sollten. Sie gehört zur Kategorie der Dokumentendatenbanken in der jeder Datensatz mit einem Schlüssel auf eine komplexe Datenstruktur verweist. Es benutzt für die Repräsentation der Daten JSON, das für einen Value sogar weitere JSON-Strukturen und damit eingebettete Objekte erlaubt.

Wie strukturiere ich meine Daten?

Ganz ohne Struktur geht es dann aber auch nicht. Eine MongoDB-Datenbank enthält ein Menge von Collections, die wiederum Dokumente enthalten. Collections kann man sich wie unter relationalen Datenbanken als Tabellen vorstellen. Jedoch ohne vorgegebene Spalten und Typen. Daraus folgt, dass man in eine Collection einfach alles in jedem Format speichern kann. Einerseits fördert das die Evolvierbarkeit der Datenbasis, andererseits ist der Entwickler besonders gefordert Ordnung in der Datenbank zu gewährleisten.

Einen Benutzer einfügen

Wieder zurück zur Praxis. Es soll ein Benutzer eingefügt werden. Falls die Datenbank noch nicht läuft, starten wir sie einfach mit dem bekannten Kommando

Jetzt erstellen wir die Datenbank, doch dafür müssen wir die MongoDB-Shell starten. Erst dann können wir mit use jdienstapp in die Datenbank wechseln. De facto existiert sie noch nicht, solange wir noch keine Daten hineingeschrieben haben

In MongoDB werden die Daten wie bereits erwähnt mit JSON durch die Gegend geschoben. Ein Benutzer sieht erst einmal so aus. Da wir schemalos arbeiten können wir fehlende Attribute immer noch ergänzen 😉

Das Kommando zum Einfügen sieht dann so aus und der Erfolg der Operation wird auch gleich von der Shell bestätigt. Die Collection usercollection existiert wie die Datenbank erst, wenn wir in sie einen Benutzer eingefügt haben

Mal sehen, ob es auch wirklich geklappt hat. Zur Erklärung: find ohne Parameter ist wie bei SQL das SELECT * FROM TABELLE. Wer mehr darüber wissen will ist hier richtig. pretty sorgt nur für eine schön formatierte Ausgabe

Die Webapplikation liest aus der Datenbank

Die Daten sind vorhanden also können wir sie verwenden um einen (naiven) Login zu bauen. Es geht darum zu zeigen, wie man aus der Datenbank liest und wie man mit post abgeschickte Daten in seinen Routen verwendet. Passwortverschlüsselung und echte Authentifizierung kommt im nächsten Teil des Tutorials.

Um MongoDB in unserer App verwenden zu können müssen mongodb und monk mit require in unsere Zentrale Datei app.js eingebunden werden. Erst dann können wir eine Verbindung aufbauen und sie in die Variable db speichern. Die nächste Anweisung gibt einfach jedem Request db mit auf den Weg. Das ist zwar nicht der optimalste Weg, aber der einfachste. Zu beachten ist, dass die app.use-Anweisung dafür erst nach dem Initialisieren von express stattfindet, sonst startet der Server nicht.

Die Route um das post aus dem Loginformular wird in der index.js eingefügt. Der Code ist sorgfältig kommentiert und erklärt sich selbst 🙂

Im Erfolgsfall wird das Template userstart aufgerufen, das wir so erstellen, nachdem wir in den Ordner views gewechselt haben

Den Inhalt halten wir ganz schlicht. Es wird lediglich eine Willkommensnachricht angezeigt in der der Username enthalten ist

Nach einem Neustart und dem Aufruf von http://localhost:3000/loginuser und der Eingabe von jdienst/jdienst werden wir von unserer Applikation herzlichst gegrüßt.

Fazit und Ausblick

In diesem Teil des Tutorials haben wir gelernt, wie wir Daten in eine MongoDB-Datenbank speichern und mit Nodejs wieder auslesen. Das wurde benutzt, um einen naiven Login zu erstellen, dessen Daten mit post an den Server geschickt werden. Im nächsten Teil des Tutorials erweitern wir den naiven Login um Passwortverschlüsselung und echte Authentifizierung.