===== NodeJS Server REST API - Erste Schritte und Erfahrungen ==== **Aufgabe**: Für das Sammeln von Daten von einzelnen IOT Device soll ein NodeJS Server als Proxy eingesetzt werden. Die Stammdatenverwaltung und Konfiguration erfolgt über Oracle APEX, das Speichern der Messdaten erfolgt in einer TimeSeries Datenbank. Der NodeJS Server erhält die Daten von den Sensoren, schreibt im ersten Schritt in Backup Dateien und versendet die Daten an die entsprechende Datenbank. Damit sind die Sensoren von der Datenhaltungsschicht abgekoppelt, die Datenbank kann gestoppt werden ohne das Daten verloren gehen. ---- ==== NodeJS Server aufsetzen ==== === Vorbereitung === Allgemein zu nodejs siehe auch [[prog:nodejs_oracledb_electron|Erste Erfahrungen mit Electron / NodeJS und der Anbindung an die Oracle Datenbank]] Der Prototyp läuft unter MS Windows, später unter auf Linux unter ARM. * Download der NodeJS Sofware unter https://nodejs.org/en/ * Starten und Installieren mit allen Optionen z.b. unter C:\entwicklung\nodejs Express Library installieren PS C:\work> npm install --save express npm WARN saveError ENOENT: no such file or directory, open 'C:\work\package.json' npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN enoent ENOENT: no such file or directory, open 'C:\work\package.json' npm WARN work No description npm WARN work No repository field. npm WARN work No README data npm WARN work No license field. + express@4.16.4 added 48 packages from 36 contributors and audited 121 packages in 6.753s found 0 vulnerabilities === Das erste Hello World === Siehe => https://expressjs.com/en/starter/hello-world.html Quellcode von dort in eine daten "server.js" kopieren und mit "node .\server.js" starten, um zu testen ob die Software richtig installiert ist und alles gefunden wird. ==Problem: Error: Cannot find module 'express' == PS C:\entwicklung\work\nodeJsonProxy> node .\server.js internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'express' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) **Lösung:** Set-Item -Path ENV:NODE_PATH -value C:\entwicklung\nodejs\node_modules node .\server.js =) === Eine Html Seite aus einem Template erstellen - EJS === Seiten mit ejs bauen npm install ejs --save ---- ==== Die Oracle Datenbank anbinden ==== Mit " npm install oracledb" das NodeJS Modul installieren npm install oracledb > oracledb@3.1.2 install C:\entwicklung\work\nodeJsonProxy\IOTGateway\node_modules\oracledb > node package/install.js oracledb ******************************************************************************** oracledb ** Node-oracledb 3.1.2 installed for Node.js 10.15.1 (win32, x64) oracledb ** oracledb ** To use node-oracledb: oracledb ** - Oracle Client libraries (64-bit) must be in your PATH environment variable oracledb ** - To get libraries, install an Instant Client Basic or Basic Light package from oracledb ** https://www.oracle.com/technetwork/topics/winx64soft-089540.html oracledb ** - A Microsoft Visual Studio Redistributable suitable for your Oracle Client library version must be available oracledb ** See https://oracle.github.io/node-oracledb/INSTALL.html for details oracledb ** oracledb ** Installation instructions: https://oracle.github.io/node-oracledb/INSTALL.html oracledb ******************************************************************************** + oracledb@3.1.2 added 1 package and audited 248 packages in 98.101s found 1 low severity vulnerability run `npm audit fix` to fix them, or `npm audit` for details -------------- ==== Quellen ==== Einleitung zu NodeJS => https://bmu-verlag.de/blog-8-nodejs/ NodeJS für ARM * https://thisdavej.com/beginners-guide-to-installing-node-js-on-a-raspberry-pi/ Tutorials: * https://codeburst.io/build-a-weather-website-in-30-minutes-with-node-js-express-openweather-a317f904897b * https://www.codementor.io/olatundegaruba/nodejs-restful-apis-in-10-minutes-q0sgsfhbd * https://www.airpair.com/javascript/node-js-tutorial * https://expressjs.com/en/resources/books-blogs.html Doku: * https://www.npmjs.com/package/rest-api-framework