© fatmawati achmad zaenuri / Shutterstock.com
Gestatten, Node.js – Teil 5

Ab auf die Konsole!


Ein Backend, in Node.js programmiert und mit Docker ausgeführt, nützt alleine noch nicht viel, wenn man darauf mangels Client nicht zugreifen kann. Dieser muss allerdings keine grafische Oberfläche aufweisen, ein Kommandozeilenwerkzeug tut es auch – und ist in vielen Fällen praktisch. Wie funktioniert das?

In den vergangenen vier Teilen dieser Serie ist eine in Node.js geschriebene Anwendung entstanden, die ein API zum Verwalten einer einfachen Aufgabenliste zur Verfügung stellt. Das API arbeitet dabei bewusst nicht nach REST, sondern trennt lediglich das Schreiben vom Lesen. Schreibende Vorgänge basieren auf POST, lesende auf GET, gemäß dem Entwurfsmuster CQRS [1].

Die eigentliche Semantik wurde dabei in den Pfad des URL verlagert, sodass die fachliche Intention erhalten bleibt, und das API weitaus besser verständlich ist, als wenn es lediglich auf die vier in REST vorgesehenen technischen Verben setzen würde. Die aktuelle Ausbaustufe der Anwendung enthält drei Routen, zum einen zum Notieren und Abhaken von Aufgaben, zum anderen zum Auflisten aller unerledigten Aufgaben:

  • POST /note-todo

  • POST /tick-off-todo

  • GET /pending-todos

Außerdem lässt sich die Anwendung durch Eingabe des Kommandos $ docker build -t thenativeweb/aufgabenliste . in ein Docker Image verpacken, das wiederum mit Hilfe des Befehls aus Listing 1 ausgeführt werden kann. Standardmäßig wird die Anwendung mit einer In-Memory-Datenbank betrieben, optional lässt sich auch eine Verbindung zu MongoDB herstellen. Dazu müssen die Umgebungsvariablen STORE_TYPE und STORE_OPTIONS übergeben werden, in denen MongoDb als Typ und etwas wie {"url":"mongodb://localhost:27017/",​"databaseName":"test"} als Connection-String zu hinterlegen sind. Bei Docker erfolgt das über den -e-Parameter, ähnlich dem Aktivieren des Production-Modus.

Listing 1

$ docker run \ -d \ -p 3000:4000 \ -e PORT=4000 \ -e NODE_ENV=production \ --init \ thenativeweb/aufgabenliste

Der Zugriff auf die Anwendung erfolgt über eine HTTP-Schnittstelle, wobei bislang ein passender Client fehlt. Als Ausweg wurde daher in den vergangenen Teilen curl verwendet, was zwar den Zweck erfüllt, aber nicht sonderlich komfortabel ist. Beispielsweise lässt sich die Liste der noch nicht erledigten Aufgaben über $ curl http://localhost:3000/pending-todos abrufen, das Anlegen einer neuen Aufgabe erfordert hingegen den Befehl aus Listing 2.

Listing 2

$ curl \ -X POST \ -H 'content-type:application/json' \ -d '{"title":"Client entwickeln"}' \ http://localhost:3000/note-todo

Die meisten Anwendungen, die im Web oder in der Cloud laufen, werden für den komfortablen Zugriff mit einer grafischen Oberfläche ausgestattet. Doch es gibt eine interessante Alternative: Man kann auch ein dediziertes Kommandozeilenwerkzeug zur Verfügung stellen, das als CLI (Command Line Interface) bezeichnet wird. Der Vorteil eines CLI besteht darin, dass es viel einfacher und zügiger entwickelt werden kann als eine anspruchsvolle grafische Oberfläche. Außerdem kann der Zugriff auf die Anwendung über ein CLI skriptgesteuert stattfinden, was die Integration in Prozesse ermöglicht.

CLIs in Node.js schreiben

Grundsätzlich ist es relativ einfach, CLIs in Node.js zu schreiben. Ein CLI is...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang