Introducció a Node.js
Contingut
Què és i per a què serveix Node.js
Node és un intèrpret Javascript del cantó del servidor que canvia la noció de com hauria de treballar un servidor. El seu objectiu és permetre a un programador construir aplicacions altamente escalables i escriure codi que pugui gestionar desenes de milers de connexions simultànies en una sola màquina física.
Instal.lació de Node.js
Per a la instal.lació seguim:
Descarreguem el codi font. Ara bé, ens fixarem de descarregar la última versió disponible que obtenim de:
En aquest cas descarreguem la versió 0.12.18 (abril 2017):
$ wget http://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.gz $ tar xvzf node-v0.12.18-linux-x64.tar.gz $ cd node-v0.12.18-linux-x64/bin $ ./node
Si la instal.lació ha anat bé ja puc fer la primera prova: Hola món!:
$ ./node
> console.log('Hello World');
Hello World
O bé si edito el fitxer hello_world.js:
console.log('Hello World');
Hello World
El podré invocar fent:
$ ./node hello_world.js Hello World
hello world http server
Crearem un petit servidor web que escolti peticions http pel port 8080. Script hello_http.js:
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200);
res.end('Hello Http');
});
server.listen(8080);
Arrenquem el servidor:
$ node hello_http.js
I en un navegador web ens comuniquem amb el servidor:
O bé podem comunicar-nos amb el servidor web a través de la línia de comandes, utilitzant la utilitat curl:
$ curl localhost:8080 Hello Http
Instal.lació del NPM: Node Package Manager
La primera prova que vull fer és fer una connexió a una base de dades mysql. Per fer-ho utiltizaré la comanda:
var mysql = require('mysql');
però prèviament s'haurà d'instal.lar el módul mysql, i això es fa amb el Node Package Manager, que prèviament s'ha d'instal.lar. Amb Linux/Ubuntu és tan fàcil com fer:
$ sudo apt-get install npm
Per assegurar-nos de què el tenim ben instal.lat:
$ npm help
Usage: npm <command>
where <command> is one of:
add-user, adduser, apihelp, author, bin, bugs, c, cache,
completion, config, ddp, dedupe, deprecate, docs, edit,
explore, faq, find, find-dupes
...
Accedir a mysql
Ara que ja tenim instal.lat el npm podem instal.lar el mòdul de mysql:
$ npm install mysql /home/joan/node-v0.12.18-linux-x64/bin └─┬ mysql@2.13.0 ├── bignumber.js@3.1.2 ├─┬ readable-stream@1.1.14 │ ├── core-util-is@1.0.2 │ ├── inherits@2.0.3 │ ├── isarray@0.0.1 │ └── string_decoder@0.10.31 └── sqlstring@2.2.0 npm WARN enoent ENOENT: no such file or directory, open '/home/joan/node-v0.12.18-linux-x64/bin/package.json' npm WARN bin No description npm WARN bin No repository field. npm WARN bin No README data npm WARN bin No license field.
Per fer una connexió a mysql seguim:
Hauràs de tenir a mà una base de dades de mysql, una taula a la que vols accedir. Per exemple, es pot accedir a la base de dades municipis hostatjada en la màquina localhost:
$ mysql -h localhost -u alumne -pkeiL2lai municipis
Script acces_municipis.js:
var http = require('http');
var mysql = require('mysql');
// Create a connection to MySql Server and Database
var connection = mysql.createConnection({
host : 'localhost',
port : 3306,
database: 'municipis',
user : 'alumne',
password : 'keiL2lai'
});
// Create a simple Web Server to respond to requests
http.createServer(function(req, res){
// RECEIVED A REQUEST!
// for this example respond with a HTTP 200 OK
res.writeHeader(200);
res.write('Connect to mySql\n');
// Query the database to some data (municipis de Jaén)
connection.query("select * from municipis m, provincies p where m.id_prov=p.id_prov and provincia='Jaén'", function(err, rows){
// There was a error or not?
if(err != null) {
res.end("Query error:" + err);
} else {
// Shows the result on console window
//console.log(rows[0]);
for (var i = 0; i < rows.length; i++) {
console.log(rows[i].municipi);
res.write(rows[i].municipi + '\n');
};
//res.write(rows[1]);
res.write('\n');
res.end("Success!");
}
});
// The server will be listen on port 8080
}).listen(8080);
Executem el script:
$ node acces_municipis.js
i des d'un navegador web accedim a la url:
Connect to mySql Albanchez de Mágina Alcalá la Real Alcaudete Aldeaquemada Andújar Arjona Arjonilla Arquillos Arroyo del Ojanco ... Success!
I per la consola també obtenim la llista de les paraules del vocabulari.
Tutorials
- http://www.nodebeginner.org/index-es.html
- videotutorial: http://node.codeschool.com/levels/1#
- Introduction to Node.js with Ryan Dahl: http://www.youtube.com/watch?v=jo_B4LTHi3I
creat per Joan Quintana Compte, febrer 2019