[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Packprogramme: Archive entpacken] [:Programme kompilieren: Pakete aus dem Quellcode erstellen] }}} [[Inhaltsverzeichnis()]] [[Bild(nodejs_logo.png, align=left)]] [http://www.nodejs.org/ Node.js] {en} ist eine Laufzeitumgebung für Javascript, welche in erster Linie zum Erstellen von serverseitigen Javascript-Anwendungen gedacht ist. Die Bibliothek erweitert "klassisches" Javascript um die notwendigen Funktionen für Webanwendungen. Die Besonderheit von Node.js ist dabei, dass sie – ebenso wie Javascript an sich – komplett ereignis-basiert arbeitet und dadurch besonders gut für Anwendungen mit vielen (offenen) Verbindungen geeignet ist. Zur Ausführung des Skriptcodes setzt Node.js dabei auf die [wikipedia:V8 (JavaScript-Implementierung):V8 Javascript Engine] von Google. = Installation = == aus den Paketquellen == Node.js ist in den offiziellen Paketquellen enthalten, jedoch nicht immer in der aktuellsten verfügbaren Version. {{{#!vorlage Paketinstallation nodejs, universe }}} Von daher empfiehlt sich die manuelle Installation einer aktuellen Version des Programms, wovon auch im weiteren Verlauf des Artikels ausgegangen wird. Außerdem wird bei der Installation über die Paketquellen der [#npm-Node-Package-Manager Node Package Manager] nicht mit installiert. Dieser kann aber über das Paket {{{#!vorlage Paketinstallation npm, universe }}} nachinstalliert werden. Falls bei der Paketinstallation mit npm der Fehler ''sh: 1: node: not found'' auftritt muss noch folgenden Zusatzpaket installiert werden: {{{#!vorlage Paketinstallation nodejs-legacy, universe }}} == Fremdquelle == [[Vorlage(Fremd,Quelle)]] Es gibt eine Fremdquelle, welche in die eigenen Paketquellen eingebunden werden kann, welche die aktuellen Version von Node.js als deb-Paket enthält. Das Vorgehen ist in der [https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions Dokumentation von Node.js] {en} erklärt. Bei dieser Installation wird ein Skript heruntergeladen und ausgeführt, welche automatisch die zur Ubuntu-Version passende Paketquelle einbindet und den passenden Schlüssel via apt-key installiert (dieser Weg funktioniert seit 22.04 nicht mehr, da apt-key nicht mehr unterstützt wird). Für diesen Installationsweg sind zwei Befehl notwendig[2][3]: {{{#!vorlage Befehl curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs }}} Hier würde die Version aus dem 12.x Zweig von Node.js installiert. Die Versionsangabe `_12.x` kann bei Bedarf durch eine andere (unterstützte Version) ersetzt werden. = Benutzung = Bei der Benutzung von Node.js kommen zwei Programme zum Einsatz: * `node` - führt Skripte aus und stellt eine Javascript-Kommandozeile bereit * `npm` - der Node Package Manager == Node - Skripte ausführen & Kommandozeile == Es gibt zwei Möglichkeiten, Javascript-Code mit Node.js auszuführen: entweder man schreibt ein Skript / Programm und ruft es entsprechend auf, so dass es ausgeführt wird[2]: {{{#!vorlage Befehl node skript.js }}} Oder man nutzt den interaktiven Modus, in dem Node.js eine Javascript-Kommandozeile zur Verfügung stellt: {{{#!vorlage Befehl node }}} Darauf hin ändert sich der Prompt zu einem `>` und man kann beliebige Javascript-Befehl und Funktionen ausführen, z.B.: {{{#!code javascript > console.log("Hallo Welt") Hallo Welt undefined }}} Zum Beenden der Kommandozeile muss zwei Mal [[Vorlage(Tasten,strg+c)]] gedrückt werden. `node` kennt eine Reihe von Optionen, welche in der [:man:Manpage] nachgelesen werden können. {{{#!vorlage Hinweis Wer Node.js über die Paketquellen installiert hat, der muss statt `node` den Aufruf `nodejs` verwenden! }}} == npm - Node Package Manager == Neben `node` wird auch noch der [https://npmjs.org/ Node Package Manager] {en} (kurz: npm) mit installiert. Dieser erlaubt es, die Kernfunktionalität von Node.js über Zusatzpakete zu erweitern. Es stehen weit über 20.000 Erweiterungen für alle erdenklichen Aufgaben zur Verfügung. Zum Installieren einer Erweiterung dient der Befehl {{{#!vorlage Befehl npm install ERWEITERUNG }}} zum Deinstallieren der Befehl {{{#!vorlage Befehl npm uninstall ERWEITERUNG }}} `npm` kann aber noch weit mehr. So dient das Programm z.B. auch dazu, eigene Pakete für Node.js zu Erstellen und in den "Package Index" nachzuladen. Details zu den Funktionen sind in der [https://npmjs.org/doc/ offiziellen Dokumentation] {en} zu finden. == Beispiel == Im folgenden ein kleines Beispiel für eine minimalistische Webapplikation, welche einen Namen abfragt und dann den Benutzer begrüßt. Dabei kommen die recht populäre, auf Node.js aufsetzende Bibliothek [http://expressjs.com/ Express] {en}, [https://www.npmjs.org/package/body-parser body-parser] {en} sowie die Template-Engine [http://jade-lang.com/ Jade] {en} zum Einsatz. Beide müssen zuerst via npm installiert werden: {{{#!vorlage Befehl npm install express npm install body-parser npm install jade }}} Das Beispiel besteht aus einer Hauptdatei '''beispiel.js''' und zwei Templates Names '''index.jade''' und '''hallo.jade''', wobei die Templates in einem Verzeichnis '''views''' liegen müssen, welches sich unterhalb des Verzeichnisses befinden muss, in dem '''beispiel.js''' liegt. Der Code sieht so aus: '''beispiel.js''' {{{#!code javascript var express = require('express'); var bodyParser = require('body-parser'); var app = express(); var urlencodedParser = bodyParser.urlencoded({ extended: false }); app.get('/', function(req, res) { res.render('index.jade', { pageTitle: 'Eingabeformular' }); }); app.post('/', urlencodedParser, function(req, res) { res.render('hallo.jade', { pageTitle: 'Hallo!', userName: req.body.username }); }); app.listen(8080) }}} '''index.jade''': {{{#!code jade doctype html html(lang="de") head title= pageTitle body h1 Namenseingabge p Dein Name: form(action="/", method="post") input(type="text", name="username") input(type="submit") }}} '''hallo.jade''': {{{#!code jade doctype html html(lang="de") head title= pageTitle body h1 Herzlich Willkommen! p Hallo #{userName} }}} Startet man die Applikation über {{{#!vorlage Befehl node beispiel.js }}} dann kann man das "Ergebnis" unter der Adresse `http://localhost:8080` im Browser abrufen. = Links = * [http://www.nodejs.org/api/ API-Dokumentation] {en} von Node.js * [github:visionmedia/jade#readme: Jade Dokumentation] {en} * [github:creationix/nvm: Node Version Manager] {en} * [ubuntu_fr:nodejs:Node.js] im franz. Ubuntu-Wiki #tag: Server, Programmierung, Javascript