• Schwierigkeitsgrad: Fortgeschrittener

Was ist node.js? node.js ist eine serverseitige JavaScript Umgebung mit der man Webanwendungen gestalten kann.

Da ich schon länger ein Projekt im Kopf habe, und man immer was dazu lernen will, schau ich hier mal ein wenig rein.

Die Webseite von node.js findet man hier: https://github.com/nodejs/node

 

Installation

Installation auf meinem LinuxMintCinnamon

apt-get install -y nodejs
apt-get install -y nodejs-legacy
apt-get install npm

Zum Testen mal die Version ausgeben:

node -v
v4.2.6

 

Zum Arbeiten mit Node lege ich mir mal ein Arbeitsverzeichnis an. /home/USER/node

 

Node.js Beispiel

Kleine Testanwendung, diese macht einen HTTP-Server auf und gibt Text aus.

Beispiel: webserver.js

// 'Hallo Welt' Webserver
var http = require('http');
var port = 8080;

var server = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
});
server.listen(port);

console.log('Der Server ist erreichbar unter http://127.0.0.1:' + port + '/');

 

Starten der Node.js Anwendung:

node webserver.js

 

Aufrufen der HTTP-Seite mit
http://127.0.0.1:8080/

 

Ausgabe ist dann:

Hello World!

Sehr sehr praktisch ?

 

MySQL Anbindung

Meine Idee einer Webanwendung sieht grob so aus, eine Webanwendung wo User Daten eintragen und diese werden in einer DB gespeichert. So weit nichts weltbewegendes.

Dazu brauche eine mysql Datenbank. OK, wofür habe ich das NAS ;)

Quelle: https://www.linode.com/docs/databases/mysql/how-to-install-mysql-on-debian-7

 

Installation MySQL

apt-get install mysql-server

Root-PW eingeben!

In die DB einloggen

mysql -u root -p

 

TestDB einrichten

create database testdb;

 

Testuser einrichten

create user 'testuser'@'localhost' identified by 'password';

 

Rechte vergeben

grant all on testdb.* to 'testuser' identified by 'password';

 

MySQL verlassen

exit

 

Als User einloggen

mysql -u testuser -p

 

Datenbank benutzen

use testdb;

 

Tabelle einrichten

create table customers (customer_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name TEXT, last_name TEXT);

 

Ich habe nun folgende Daten:

  • User: testuser
  • PW: password
  • Datenbank: testdb

Tabelle mit customer_id, first_name, last_name

 

MySQL Node.js Testanwendung

Wechsel auf den PC zum Coden.

Eigenes Verzeichnis erstellen!

mkdir mysql

Testprogramm erstellen, vorher das mysql Paket installieren. npm ist ein eigener Paketmanager von node.js!

npm install mysql

Danach findet man ein Verzeichnis node_modules mit folgendem Inhalt

~/node/mysql/node_modules $ ls

bignumber.js inherits mysql sqlstring

core-util-is isarray readable-stream string_decoder

 

Nun das Testprogramm:

var mysql = require('mysql');
var connection = mysql.createConnection({
host : '192.168.3.xxx',
user : 'testuser',
password : 'password',
database : 'testdb'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});

connection.end();

 

Quelle: https://github.com/mysqljs/mysql

 

Das ganze als mysql.js abspeichern.

 

Anwendung starten

node mysql.js

 

Folgende Ausgabe bekam ich:
frank@frank-MS-7850 ~/node/mysql $ node mysql.js
/home/frank/node/mysql/mysql.js:12
if (error) throw error;
^

Error: connect ECONNREFUSED 192.168.3.243:3306
at Object.exports._errnoException (util.js:870:11)
at exports._exceptionWithHostPort (util.js:893:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1063:14)
--------------------
at Protocol._enqueue (/home/frank/node/mysql/node_modules/mysql/lib/protocol/Protocol.js:141:48)
at Protocol.handshake (/home/frank/node/mysql/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/home/frank/node/mysql/node_modules/mysql/lib/Connection.js:130:18)
at Object. (/home/frank/node/mysql/mysql.js:9:12)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:442:10)
at startup (node.js:136:18)

Grr! Ok, die DB ist von extern nicht erreichbar. "Error: connect ECONNREFUSED 192.168.3.243:3306"

Auf dem NAS:
nano /etc/mysql/my.cnf

Zeile:
bind-address = 127.0.0.1 (Nur lokaler Zugriff!)
in
bind-address = 0.0.0.0
ändern!

 

Neustarten mit
/etc/init.d/mysql restart

Erneut mysql.js starten!

Ausgabe:
frank@frank-MS-7850 ~/node/mysql $ node mysql.js
The solution is: 2

Fertig! Zugriff funktioniert!


Quellen:

Gutes Tut: http://nodecode.de/chat-nodejs-websocket

MySQL Tut: https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/

JavaScript Client MySQL Tut: https://github.com/mysqljs/mysql