MyRaspi – NodeJS installieren und einrichten

Nun ist es soweit. Der erste Teil, der Reihe zu unserem ‚MyRaspi‘ Projekt kann beginnen. Im ersten Teil fangen wir mit dem Back-End des Projekts an. Dazu installieren wir auf dem Raspberry die NodeJS Plattform um eine entsprechende REST Schnittstelle für die App anzubieten. Haben wir die Grundlagen begriffen, kann die weitere Einrichtung schneller vorangehen. Fangen wir also an.

NodeJS Einleitung

Warum habe ich mich für NodeJS entschieden? Naja, ich wollte einfach kein PHP machen. Alternativen gibt es zwar genug, aber erstens habe ich noch nie mit Ruby gearbeitet, Python ist eher auch ein Fremdwort und JavaEE und C# da ist einfach die RaspberryPi Plattform nicht geeignet. Außerdem ist JS einfach und es gibt genug Anleitungen und Erweiterungen für nodeJS um richtig starten zu können. Zudem verbraucht nodeJS nicht allzu viel Ressourcen und kann ohne weitere Probleme mit mehreren Verbindungen auf einmal klar kommen.

Installation und Entwicklungsumgebung

Für Android kommen wir nicht am Android Studio vorbei. Aber was nutzen wir für das Back-End? Am einfachsten eignet sich hierfür nicht eine IDE sondern zum Beispiel ein Texteditor. Ich würde zum einem entweder Sublime oder Notepad++ empfehlen. Soll es „professioneller“ werden, kommt man bestimmt nicht am WebStrom (kein freeware) vorbei. Alternativ kann Visual Studio Code verwendet werden. Das habe ich und kann euch das Teil herzlichst empfehlen. Bevor wir aber mit dem Code anfangen, müssen wir zuerst nodeJS installieren. Da ich meinen RaspberryPi 3 für Android Things „missbraucht“ habe, musste mein alter RaspberryPi 1 dran glauben. Je nach der CPU Architektur muss eine andere Version von NodeJS installiert werden. Bei einem RaspberryPi ist es ganz einfach alles unter 2 ist ARMv6, alles drüber ARMv7. Alle möglichen Distributionen finden wir hier. Ich habe mich für die Version 8.4.0 entschieden.

>wget https://nodejs.org/dist/latest-v8.x/node-v8.4.0-linux-armv6l.tar.gz

Ist das Paket heruntergeladen müssen wir es entpacken.

>tar -xzf node-v8.4.0-linux-armv6l.tar.gz

Wenn wir dann in das verpackte Verzeichnis in den Unterordner /bin wechseln können wir die Version überprüfen.

>./node -v
>v8.4.0

Wir kopieren dann den kompletten Inhalt aus dem entpackten Verzeichnis.

>cd node-v8...
>sudo cp -R * /usr/local/

Jetzt brauchen wir nur noch das Verzeichnis als PATH Variable zu hinterlegen.

>export PATH=$PATH:/usr/local/bin

Jetzt können wir von überall auf die Module ’node‘ und ’npm‘ zugreifen. Zum testen können wir nochmal die Versionen der beiden checken.

>node -v
>v8.4.0
>npm -v
>5.3.0

Die Installation ist damit abgeschlossen.

REST – Schnittstelle und erste Schritte

Wo wir nun eine Basis für das Back-End haben, können wir mit dem Aufsetzen des Servers beginnen. Dazu erstellen wir einen Ordner für das ‚MyRaspi‘ Projekt oder wie auch immer ihr das Projekt nennen wollt und lassen es durch npm initialisieren.

>mkdir myRaspi
>cd myRaspi
>sudo npm init

NPM ist ein Paket Manager für JavaScript. Dadurch haben wir Zugriff auf die meisten verfügbaren Bibliotheken, welche uns noch sehr helfen werden. Nun könnt ihr aber erstmal in den folgenden Punkten, Sachen wie den ‚package Name‘, die Version oder den ‚entry point‘ verändern. Hier könnt ihr euch austoben, wobei ihr den ‚entry point‘ ruhig auf ‚index.js‘ belassen könnt. Am Ende befindet sich die sogenannte „package.json“ Datei im Projekt Ordner mit den zuvor abgefragten Informationen. Auch später enthaltene „depedencies“ werden in dieser Datei aufgelistet. Den Server werden wir uns aber nicht umständlich basteln müssen, sondern nutzen dazu das „restify“ Framework mit welchem ein REST – API – Server ganz schnell erstellt wird. Zuerst holen wir uns aber das Framework und nutzen npm dazu.

>npm install restify --save

Die „dependency“ können wir dann im Ordner „node_modules“ betrachten. Als erstes erstellen wir einfach eine Datei und nennen diese „server.js“. Dazu folgt sogleich der Inhalt.

var restify = require('restify');

var options = {
  name: "RaspiServer v.0.0.1"
};

var server = restify.createServer(options);

server.use(restify.plugins.bodyParser());

module.exports = server;

require('./routes');

Zuerst brauchen wir den Zugriff auf die „restify“ Funktionen. Die „options“ sind für die „createServer“ Funktion bestimmt. Hier können wir die Version oder wie im Beispiel oben den Namen des Servers übergeben. Danach wird der Server erstellt. Mit „use“ bestimmen wir den Handler für die Routen. Erstmal einfach übernehmen. Danach exportieren wir das „server“ Objekt als Modul. Am Ende gibt es noch ein „require“ und zwar für die Routen. Die Routen bilden im Endeffekt die API Schnittstelle zum unserem Server. Dadurch können wir Informationen per HTTP Methoden (GET, POST usw.) abgreifen bzw. verändern. Also erstellen wir die Datei „routes.js“ und legen diese im gleichen Verz. wie die „server.js“ Datei ab. Hier der Inhalt.

var server = require('./server');

server.get('/test', function response(req, res, next) {
  res.send('Welcome to MyRaspi Server');
  next();
})

Zuerst holen wir das „server“ Objekt. Mit „get“ nutzen wir die HTTP Methode GET und geben als erste Route zum Spaß mal „/test“ ein. Das heißt die Funktion könnten wir dann mit einem GET Parameter über die Adresse „http://ip-adresse-des-raspberry’s/test“ abrufen. Die Antwort wird über die Funktion „response“ geliefert. Als Parameter stehen uns einmal der „request“, der „response“ und next zur Verfügung. Mit „res.send“ schicken wir also die Antwort zum Client. Mit „next()“ rufen wir die Funktion auf, damit der Server nicht bei dieser Antwort stecken bleibt. Keine Sorge, momentan ist das alles nur auf die schnelle gemacht. Später lagern wir alles schön aus. Jetzt fehlt uns nur noch die wichtigste Datei und zwar die „index.js“ Datei.

const PORT = 5555;

var server = require('./server');

server.listen(PORT, function () {
  console.log('Server listening to %j', server.address());
})

Zuerst eine konstante mit dem Port auf welchem der Server laufen wird. Dann holen wir uns das „server“ Objekt. Mit „listen“ starten wir den Server auf dem oben angegebenen Port wodurch der Server bereit für unsere Anfragen wird. Damit wir wissen, das alles richtig läuft gibt es noch eine kleine Konsolen Meldung. Jetzt können wir den Server testen.

>node index.js
oder
>node .

Testen

Wenn alles gut gelaufen ist, bekommen wir erstmal eine schöne Konsolen Meldung.

Und wie testen wir jetzt die erste Abfrage? Dazu empfehle ich das Plug-In „Postman„. Gibt es auch als Chrome Erweiterung. Mit Postman können wir dann einfach den GET „test“ Request testen.

Damit hätten wir schon mal einen Server den wir erreichen und ggf. erweitern können. Das reicht auch für den ersten Teil der Reihe. Im nächsten Teil kümmern wir uns um weitere „Routen“ und räumen das Projekt entsprechend auf.

Bis dahin viel Spaß beim basteln.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.