Article précédent: Qu’est-ce que ce Node ?

Le coeur de la bête

NodeJS est en fait une extraction du moteur javascript de Google Chrome, le « V8 engine ». Et il faut avouer que l’idée à la base est bonne. On peut voir aujourd’hui pléthore de jeux sur navigateur s’appuyant sur le moteur javascript, et ce fameux moteur est extrêmement optimisé. Pourquoi ne pas utiliser cette puissance pour faire des traitements côté serveur ? C’est l’idée que je qualifierai de géniale qu’à eu l’équipe de Joyent.

Installation

Commençons par le début et installons le serveur NodeJS sur notre machine.

Les distributions Windows, linux ou MacOSX sont toutes disponibles. Téléchargez et installez.

1. Télécharger le kit d’installation (.msi pour Windows), oubien l’archive sous Linux ou MacOsX.

NodeJS: Télécharger quoi et où ?

2. Installer !

  • on Windows (édition 64 bits) :
$> node-v0.10.2-x64.msi
  • on any Linux / MacOsX :
$> tar -zxvf node-v0.10.2-linux-x86.tar.gz

Pour vérifier que l’installation s’est correctement passée, ouvrez une session de commande et lancer la commande suivante:

$> node -v
v0.10.2

Ok, cela semble fonctionner, nous sommes en présence d’une version 0.10.2.

That’s all !

Note
A l’heure où je vous parle, une version 0.10.5 du 23 avril 2013 vient de sortir.

Premier test ?

Lançons nous dans l’exploration avec un exemple ultra Basic, le fameux “Hello World”.

Le code !

allez, hop, direct le code

var http = require('http');
function myRequestHandler(request,response){
  console.log(request.url+"is requested");
  response.writeHeader(200,{ 'Content-Type':"text/plain"});
  response.end("Hello World !",'utf8');
}
var server = http.createServer(myRequestHandler).listen(8000);

Voila une belle pièce de code. pour voir le résultat, positionner vous dans le répertoire de votre fichier demo01.js et lancer une commande :

$ node demo01.js

Et à l’aide de votre browser préféré, accédez à l’url http://localhost:8000/.

Incroyable, la page du navigateur affiche “Hello World !”

Bon et bien, voila réaliser le premier server a base de nodejs.

Décortiquons un peu.

var http = require('http');

pour les Javaïste, cela correspond un peu à import. Ici pour un module interne à nodejs, le module qui s’occupe du protocole http et qui propose un server (et aussi uin client que nous découvrirons plus tard).

function myRequestHandler(request,response){
  console.log(request.url+"is requested");
  response.writeHeader(200,{ 'Content-Type':"text/plain"});
  response.end("Hello World !",'utf8');
}

A travers la définiition de cette fonction, nous expliquons au serveur node comment répondre à l’appel d’une requete. les attributs requestet response parlent d’eux même. Le nom de la fonction est libre.
Dans les lignes suivantes, nous poussons un message vers la console standard de Node (console.log(...)) puis nous préparons la réponse.

La méthode response.writeHeader(code, options) permet de spécifier un code retour , relatant le status HTTP de réponse, ainsi que quelques options a glisser dans le header HTTP de la réponse. Nous spécifions ici une type de contenu, Content-Type, que nous fixons à “text/plain”.

Enfin, nous envoyons la fameuse phrase mythique que tout Geek connait sur le bout des doigts : “Hello World !” avec unresponse.end(data,[encoding]).

où data = “Hello World !” et encoding = ‘utf8’.

Note
Comme vous pouvez le constater, nous forçons l’encodage à utf8, mais c’est ici pour l’exmeple car par défaut les reponse sont envoyées dans cet encodage.

Enfin, en derniere ligne, on instancie notre serveur:

var server = http.createServer(myRequestHandler).listen(8000);

Comme on peut le comprendre, on déclare la fonction myRequestHandler créée en tant que handler des requêtes HTTP arrivant sur le port 8000.

Notre premier server NodeJS – demo01.js

Conclusion ?

Voila, vous savez faire un serveur orienté EventDriven, avec Asynchronous I/O en NodeJS.
Toute requète arrivant sur le port 8000 est interceptée et routée vers myRequestHandler(request,response).

Alors, heureux ?

Pour plus d’information, je vous invite dès à présent de voir http://nodejs.org
demo: http://bitbucket.org/McGivrer/nodejshowto

To Be Continued …

Publicités