Node.js ist eine serverseitige JavaScript-Plattform zur Realisierung von Webservern
Node.js wird dabei in der JavaScript-Laufzeitumgebung „V8“ ausgeführt
Node.js wurde 2009 vom Webentwickler Ryan Dahl veröffentlicht und ist auf verschiedenen Plattformen als Open-Source-Software unter
der MIT-Lizenz verfügbar
Node.js ist modular aufgebaut und verwendet den Paketmanager npm zur Verwaltung seiner Module
npm stand anfangs für „Node Package Manager“ und ist der Paketmanager für Node.js
Der Paketmanager npm dient dazu Pakete, d. h. vorgefertigte Node.js-Module, in Node.js zu integrieren, zu aktualisieren und wenn nötig wieder zu entfernen
Mit „npm ls“ kann abgefragt werden, welche Module aus dem globalen Repository geladen und lokal installiert wurden
Mit „npm installmodulname“ kann ein Modul heruntergeladen und installiert werden
Um ein Modul in einer eigenen Applikation zu verwenden, wird das entsprechende Modul mit „require“ eingebunden
Mit „npm updatemodulname“ kann ein Modul aktualisiert werden
Mit „npm uninstallmodulname“ kann ein Modul wieder deinstalliert werden
Das HTTP-Modul ist ein in Node.js integriertes Modul für den Transfer von Daten über das HTTP-Protokoll
Mit dem HTTP-Modul wird ein HTTP-Server erstellt, der auf einem konfigurierbaren Server-Port auf Anfragen wartet und einedefinierbareAntwort zurück gibt
Das HTTP-Modul wird mit „require(‚http‘)“ eingebunden
Ein Webserver kann mit „http.createServer(function(req, res) { … }).listen(port);“ erstellt werden
Dererste Parameter der Callback-FunktionenthältInformationen zur Anfrage an den Server
DieAntwortkann über denzweiten Parameter der
Callback-Funktiongesendet werden
Das URL-Modul ist ein in Node.js integriertes Modul, mit dem eine Webadresse in lesbare Abschnitte aufgespalten werden kann
Das URL-Modul liefert u. a. Hostnamen,Port undPfadsowiedieParameter aus der Webadresse
Außerdem können die Parameter zusätzlich im JSON-Format ausgegeben werden
Das URL-Modul wird mit „require(‚url‘)“ eingebunden
Mit „url.parse(adresse)“ kann eine Adresse zu einem URL-Objekt geparst werden, dass dann die einzelnen Bestandteile der Adresse als Eigenschaften
enthält
Auf die Bestandteile der Adresse kann dann mit „urlobjekt.bestandteil“ zugegriffen werden
Mit „url.parse(req.url, true).query“ kann aus den Parametern einer URL ein JSON-Objekt erstellt werden
Mit „jsonobjekt.parametername“ kann dann auf den Wert des entsprechenden Parameters zugegriffen werden
Anwendungen die mit Node.js erstellt werden sind Ereignis-gesteuert
Das Events-Modul ist ein in Node.js integriertes Modul, mit dem Events (Ereignisse) und Event-Listenererstellt, verwaltet und gelöscht
sowei Ereignisse ausgelöst werden können
Das Events-Modul kann mit „require(‚events‘)“ in eine Anwendung eingebunden werden
Um die Eigenschaften und Methoden des Events-Moduls verwenden zu können, muss zunächst ein EventEmitter-Objekt mit „var eventEmitter = new events.EventEmitter()“ erstellt werden
Mit „eventEmitter.on(‚event‘, eventListener)“ oder „eventEmitter.addListener(event, eventListener)“ kann einem Ereignis ein Event-Listenerzugewiesen werden
Mit „eventEmitter.emit(‚event‘)“ kann ein Ereignis ausgelöst werden
Mit „eventEmitter.removeListener(‚event‘, eventListener)“ kann ein einzelner Event-Listener von einem Event entfernt werden
Mit „eventEmitter.removeAllListeners([‚event‘])“ können alle Event-Listener von einem Event oder alle Event-Listener in einer Anwendung entfernt werden
Mit „eventEmitter.listeners(‚event‘)“ können alle mit einem Event verknüpften Event-Listener ausgegeben werden
Mit „events.listenerCount(emitter, ‚event‘)“ kann die Anzahl der mit einem Event verknüpften Event-Listener ermittelt werden
Mit „eventEmitter.once(‚event‘, eventListener)“ kann einem Event ein Event-Listener für eine einmalige Ausführung zugeordnet werden
Das FS-Modul (File-System-Modul) ist ein in Node.js integriertes Modul, das die Verwendung des Dateisystems des auf dem Computer
installierten Betriebssystems ermöglicht
Das FS-Modul ermöglicht das erstellen, lesen, löschen, aktualisieren und umbenennen von Dateien und Verzeichnissen
Das FS-Modul wird mit „require(‚fs‘)“ eingebunden
Mit „fs.open(pfad, flag, callback)“ kann eine Datei geöffnet werden
Mit „fs.readFile(pfad, buffer, offset, length, position, callback)“ können Daten aus einer Datei ausgelesen werden
Mit „fs.close(fd, callback)“ kann eine Datei geschlossen werden
Mit „fs.writeFile(pfad, daten, options, callback)“ können Daten in eine Datei geschrieben werden
Mit „fs.appendFile(pfad, daten, options, callback)“ können Daten an die bereits existierenden Daten einer Datei angehängt werden
Mit „fs.ftruncate(fd, länge, callback)“ kann eine Datei geleert werden
Mit „fs.rename(old_filename, new_filename, callback)“ kann eine Datei umbenannt werden
Mit „fs.unlink(filename, callback)“ kann eine Datei gelöscht werden
Mit Hilfe des MySQL-Moduls kann von Node.js aus auf das Datanbankmanagementsystem MySQL zugegriffen werden
Das MySQL-Modul ist nicht in der Standardinstallation von Node.js enthalten und muss mit „npm install mysql“ installiert werden
Mit „var con = mysql.createConnection({host: ‚hostname‘, user: ‚username‘, password: ‚password‘})“ kann eine Verbindung zu MySQL definiert werden
Mit „con.connect(function(err){...})“ kann eine Verbindung zu MySQL hergestellt werden
Mit „con.query(‚CREATE DATABASEdatenbankname‘, function(err, result){...})“ kann eine neue Datenbank erstellt werden
Mit „con.query(‚CREATE TABLEtabellenname(spaltenname SPALTENTYP, ...)‘, function(err, result){...})“ kann eine neue
Tabelleerstellt werden
Damit die Tabelle in der gewollten Datenbank erstellt wird, muss bei der Verbindungskonfiguration mit „database: ‚datenbankname‘“ die entsprechende Datenbank angegeben werden
Mit „con.query(‚ALTERTABLEtabellennameDROP COLUMNspaltenname‘, function(err, result){...})“ kann eine
Spalte in einer Tabellegelöscht werden
Mit „con.query(‚ALTERTABLEtabellennameADD COLUMNspaltennameSPALTENTYPFIRST‘, function(err,
result){...})“ kann eine neueSpalte an den Anfang einerTabellehinzugefügt werden
Mit „con.query(‚DROP TABLE tabellenname‘, function(err, result){...})“ kann eine Tabelle gelöscht werden
Mit „con.query(‚INSERTINTOtabellenname(spaltenname1, spaltenname2, …) VALUES (‚Feldwert1, Feldwert2, ...)‘, function(err,
result){...})“ kann ein Datensatz in eine Tabelle eingefügt werden
Mit „con.query(‚SELECTspaltenname1,spaltenname2FROMtabellenname‘, function(err, result){...})“ können
nur bestimmte Spalten derDatensätze einerTabelle ausgelesen werden
Die ausgelesenen Datensätze werden mit dem „result“-Objekt in der Callback-Methode zurückgegeben
Mit „con.query(‚SELECT *FROMtabellennameWHEREfeldname=wert‘, function(err, result){...})“
können die Datensätze einer Tabellenach bestimmten Kriterienausgelesen werden
Mit „con.query(‚SELECT *FROMtabellennameORDER BYspaltenname‘, function(err, result){...})“ können alle Datensätze
einer Tabelleaufsteigend sortiertausgelesen werden
Mit „con.query(UPDATEtabellennameSET spaltenname = ‚wert‘WHERE spaltenname = ‚wert‘‘, function(err, result){...})“ kann ein
bestimmtes Feld eines Datensatzesangepasst werden
Mit „result.affectedRows“ kann ausgelesen werden, wieviele Zeilen tatsächlich angepasst wurden
Mit „con.query(DELETE FROMtabellennameWHERE spaltenname = ‚wert‘‘, function(err, result){...})“ kann ein bestimmterDatensatz gelöscht werden
Das Express-Modul ist ein Web-Framework für dasschnelle und unkomplizierten Entwickeln von Webanwendungen und Webservices
Das Express-Modul ist nicht in der Standardinstallation von Node.js enthalten und muss mit „npm install express“
installiert werden
Mit „app.get(‚/‘, function(req, res) {...})“ kann eine einfache Server-Anfrage realisiert werden
Dabei muss mit „app.listen(port, function() {...})“ zusätzlich der Port für die Serveranfrage angegeben werden
Mit Hilfe des HTTP-Routings können differenziertere Anfragen an den Server gestellt werden
Mit „app.httpmethode(...)“ können die verschiedenen HTTP-Methoden verwendet werden
Mit „app.httpmethode(‚pfad‘, ...)“kannüber die Pfadangabe eine Anfrage weiter differenziert werden
Wird in einem „form“-Element ein „submit“-Button betätigt, wird die URL im „action“-Attribut des „form“-Elements aufgerufen
Dabei wird der Inhalt der „input“-Elemente zusammen mit deren „name“-Attributen als Parameter an die URL angefügt
Auf der Serverseite kann dann mit „req.query“ auf alle Parameter und mit „req.query.parametername“ auf die einzelnen Werte zugegriffen werden
Mit der POST-Methode ist der Ablauf wie mit der GET-Methode, nur dass hier die Parameter nicht sichtbar übertragen werden
Um die Parameter auf der Serverseite auslesen zu können muss dann die URL mit Hilfe des „body-parser“-Moduls dekodiert werden
Der Zugriff erfolgt dann über das „body“-Element anstatt über „query“
Mit „app.use(express.static(‚verzeichnisname‘))“ kann auf ein Verzeichnis für die Node.js-Anwendung verwiesen werden, aus dem mit
„serveraufruf/dateiname“Dateiengeladen werden können
Mit „app.use(multer({dest: „/verzeichnisname/“}).any()“ kann ein temporäres Verzeichnis für den Datei-Upload definiert werden
Mit „req.files[index]“ kann auf die hochgeladenen Dateien zugegriffen werden
Im „form“-Element muss zusätzlich „enctype=“multipart/form-data“ angegeben werden
REST steht für Representational State Transfer und ist ein Architekturprinzipfür den Datenaustausch zwischen Anwendungen und wird meistfür Webservices verwendet
Im Gegensatz zu anderen Architekturprinzipien sind REST-Services einheitliche Schnittstellen ohne Methodendefinitionen
Für die Umsetzung von REST-Services wird das zustandslose Protokoll HTTP mit seinen MethodenPOST,GET, PUTundDELETE verwendet
Mit „app.get(‚/‘, … )“ wird im Beispiel der Einstieg der Startseite und mit „app.listen(8081)“ der Port definiert
Mit „JSON.parse(data)“ kann eine JSON-Struktur in ein JavaScript-Objekt umgewandelt werden
Mit „app.post(‚/addUser‘, ...)“ wird im Beispiel der Aufruf zum Hinzufügen von Benutzern definiert
Die Übergabeparameterwerdenaus der POST-Methode mit „req.body.parameter“ ausgelesen
Mit „JSON.stringify(object)“ kann ein JavaScript-Objekt in eine JSON-Struktur umgewandelt werden
Mit „res.redirect(‚url‘)“ kann innerhalb einer HTTP-Route eine andere HTTP-Route aufgerufen werden
Mit „app.post(‚/deleteUser‘, ...)“ wird im Beispiel der Aufruf zum Löschenvon Benutzern definiert