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 mithttp://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!)
inbind-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