http://www.nodebeginner.org/ ***** et voir son livre
node.js installation on github
dependancy injection by Martin Fowler
execution in the kingdom of nouns
http://nodejs.org/
Utilisation :
- dans Terminal, lancer node avec le fichier de création du serveur (web-server.js dans le tutorial angular)
C'est un interpréteur js côté serveur (en dehors d'un navigateur) et une librairie de modules.
L'interpréteur est basé sur le moteur js de Chrome (V8 VM de Google).
Exemple de module : écrire un string sur le STDOUT (standard output)a console.
On peut l'invoquer directement dans la ligne de commande en lui passant un fichier js. On peut aussi créer un serveur qui répondra à la demande d'une adresse ip par le navigateur.
L'application node.js du tutorial nodebeginner se compose de :
- un serveur http, pour fournir des pages en réponse aux requêtes utilisateur exprimées par l'intermédiaire du navigateur,
- un routeur, qui mappe les requêtes (url+autres infos) a des request-handlers,
- des request-handlers
- des request-data handlers qui traitent les données passées en POST,
- une logique de présentation que les request-handlers utilisent,
- un upload-handler.
(rq. En PHP, on ne s'occupe pas de la partie serveur http)
Organisation du code proposée :
index.html
server.js : pour la partie création du serveur - on y inclut souvent l'analyse de la requête (i.e. l'extraction de l'URL et des paramètres GET ou POST...) - ce module exporte une fonction de démarrage
router.js : pour router les requêtes (au lieu de le faire directement dans notre fonction onRequest, on crée un module) vers les request handlers appropriés
request-handler.js
Bonnes pratiques :
pour la variable d'appel d'un module, prendre le nom du module ex. var http = require("http");
var http = require("http");
La fonction require("nom_de_module") de node.js permet de rendre disponible par l'intermédiaire d'une variable déclarée toutes les objets signalés par un "export" dans le module appelé.
Fonctionnement de require/export.
Voici une façon de créer un serveur qui ne fait rien d'autre qu'être, sur le port 8888 (!) :
var http = require("http");
var server = http.createServer();
server.listen(8888);
et si on veut définir la fonction de traitement des requêtes on fait :
http.createServer(onRequest);
avec onRequest qu'on définit comme fonction prenant deux paramètres : request et response
Rq. En js on peut définir une fonction au moment où on la passe en argument d'une autre fonction (ainsi cette fonction peut rester anonyme).
event-driven, asynchronous callbacks : en js (et en node.js) ce sont des fonctions de rappel asynchrones déclenchées par des événements.
node.js utilise cette technique dans des modules asynchrones qui reçoivent en argument des fonctions de rappel à lier à des opérations que l'on souhaite effectuer de façon asynchrone.
L'intérêt d'utiliser des fonctions de rappel, c'est de libérer le serveur node.js sans attendre le résultat d'une opération longue : il peut effectuer la suite des opérations ou bien répondre à un autre utilisateur (en effet, node.js est toujours un process unique).
Analyse de la requête
Avec le module url et querystring voir : http://www.nodebeginner.org/#how-our-server-handles-requests