| | |
| | | </section> |
| | | <section> |
| | | <section> |
| | | |
| | | <h2>NodeJS</h2> |
| | | </section> |
| | | <section> |
| | | <h3>Was ist NodeJS?</h3> |
| | | <ul> |
| | | <li class="fragment">"JavaScript auf dem Server"</li> |
| | | <li class="fragment">basiert auf der V8-Engine von Google</li> |
| | | <li class="fragment">Laufzeitumgebung für JavaScript mit eigener API</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <img data-src="/assets/images/node-js.svg"> |
| | | </section> |
| | | <section> |
| | | <h3>Überblick über die Node-API</h3> |
| | | <p>Die API ist in viele verschiedene Module aufgeteilt</p> |
| | | <table> |
| | | <tr><td>fs</td><td>Dateisystem</td></tr> |
| | | <tr><td>crypto</td><td>Kryptografie</td></tr> |
| | | <tr><td>zlib</td><td>Datenkompression</td></tr> |
| | | <tr><td>http</td><td>Webserver</td></tr> |
| | | <tr><td>net</td><td>Netzwerk (TCP)</td></tr> |
| | | <tr><td>tls</td><td>Verschlüsseltes Netzwerk (TCP)</td></tr> |
| | | </table> |
| | | </section> |
| | | <section> |
| | | <p>Aufruf eines Programmes in der Kommandozeile</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | node [Node-Parameter] path/to/script.js [Anwendungsparameter] |
| | | </code> |
| | | </pre> |
| | | <p>z.B.</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | node --inspect index.js --port 3000 |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Einbinden von Modulen</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | const fs = require("fs"); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Aufbau eines Moduls</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | module.exports = { |
| | | foo: 5, |
| | | sayHello: function(name) { |
| | | return "Hello " + name + "!"; |
| | | } |
| | | } |
| | | </code> |
| | | </pre> |
| | | <p>oder</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | exports.foo = 5; |
| | | exports.sayHello = function(name) { |
| | | return "Hello " + name + "!"; |
| | | }; |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Aufgabe</p> |
| | | <p>Schreibe ein Modul, welches eine <code>Square</code>-Klasse zur Verfügung stellt, mit welchem man den Umfang und den Flächeninhalt eines Rechtecks berechnen kann:</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | const Square = require("./square"); |
| | | |
| | | const square = new Square(2, 3); |
| | | |
| | | console.log(square.getArea()); // => 6 |
| | | console.log(square.getPerimeter()); // => 10 |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <h3>Module für die Kommandozeile</h3> |
| | | <p>package.json</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | npm init -y |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | { |
| | | ... |
| | | "bin": { |
| | | "my-command": "./index.js" |
| | | } |
| | | } |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>index.js</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | #! /usr/bin/env node |
| | | |
| | | console.log("Hello world from the command line!"); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Installation</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | npm install -g path/to/project |
| | | </code> |
| | | </pre> |
| | | z.B. |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | npm install -g . |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Ausführung</p> |
| | | <pre> |
| | | <code class="bash" data-trim data-line-numbers> |
| | | my-command |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Kommandozeilenparameter</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | console.log(process.argv); |
| | | </code> |
| | | </pre> |
| | | <p>angelehnt an die Parameter aus der Programmiersprache <code>c</code>:</p> |
| | | <pre> |
| | | <code class="c" data-trim data-line-numbers> |
| | | int main(int argc, char *argv[]) |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Aufgabe</p> |
| | | <p>Mache das vorherige Programm für die Konsole aufrufbar, sodass die Länge und Breite für das Rechteck per Konsolenargumente übergeben werden können und der Flächeninhalt ausgegeben wird:</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | my-command 2 3 |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | </div> |