Tutoriel sur Node JS

Bonjour tout le monde,

logo nodejitsuAujourd’hui je vais vous expliquer comment installer l’environnement de Node JS sur Linux et comment créer sa première application en JavaScript avec Node JS.

Cet article va donc se découper en 3 parties :

  1. Installation de Node JS et ses dépendances
  2. Fonctionnement de Node JS
  3. Première application en Javascript

Si vous avez des soucis de compréhension ou encore des problèmes durant l’installation, n’hésitez pas à poster un commentaire, je vous répondrez le plus rapidement possible et ça pourra surement aider les prochains lecteurs par la suite ;).

I/ Installation de Node JS et ses dépendances

Linux L’installation de Node JS va se faire dans la console (même si nous sommes en 2011).

Pour cela, ouvrez un terminal : Applications -> Accessoires -> Terminal

$> tar -xvf node-v0.4.10.tar.gz
$> cd node-v0.4.10
$> sudo apt-get install g++ curl libssl-dev apache2-utils git-core
$> ./configure
$> make
$> sudo make install
Qu’est ce que nous avons fait ici ? (traduction ligne par ligne)
  • Téléchargement de l’archive (tar.gz) de Node JS version 0.4.10
  • Décompression de l’archive
  • On se positionne dans le dossier de l’archive décompressée
  • On installe les dépendances de Node JS (pas besoin de plus de précisions dessus)
  • Configuration de Node JS (c’est ici que Node JS vous précise une erreur si il manque quelque chose dans votre système)
  • Compilation de tout les fichiers (écrits en C++) afin de les préparer à l’installation
  • Installation de Node JS sur le système (la commande sudo va vous demander votre mot de passe avant d’exécuter la commande, c’est une sécurité car vous passez en mode root)
Maintenant il faut installer NPM (Node Packet Manager)…mais qu’est-ce que c’est ?
NPM est un gestionnaire de modules pour Node, il permet d’ajouter un dossier avec un tas de fichiers dedans qu’on inclus par la suite dans notre fichier JavaScript afin d’ajouter pleins de fonctionnalités (exemple : gestion des sockets avec socket.io, utilisation d’un framework avec Express JS, utilisation de template avec Jade…).
Cet outil nous permet aussi d’installer directement un exécutable du module grâce a l’option -g (très pratique pour Coffee-Script par exemple, mais j’en parlerai dans un prochain article).
Cette installation est facultative pour ce tutoriel mais je vous la conseille vivement afin de pouvoir reproduire les prochains tutoriels que je posterai par la suite.

Installation de NPM :

$> sudo su

Ces commandes permettent d’avoir un exécutable nommé npm afin d’installer directement des modules de Node JS, j’en reviendrai dans un prochain article.

II/ Fonctionnement de Node JS

Normalement, vous devriez avoir une commande nommée node. Cette commande va nous permettre d’interpréter et d’exécuter du code JavaScript sans devoir lancer un navigateur web.

interogationINFO : J’ai oublié de le préciser dans l’article précédent présentant Node JS, mais l’interpréteur ne comprend pas les commandes propres au client (évènements DOM, objet window, alert…), ce qui est plutôt logique me diriez vous car nous sommes coté serveur ;)

Tout d’abord, nous allons créer un fichier JavaScript se nommant test.js.

Dedans ce fichier nous allons écrire un peu de JavaScript (je m’inspire beaucoup de la vidéo de l’auteur je l’avoue) :

setTimeout(function() {
console.log(‘Coucou’);
}, 2000);
console.log(‘toi’);

Qu’est-ce code JavaScript veut dire ?

  • La fonction setTimeout permet d’exécuter une fonction après X millisecondes donnes en 2eme paramètre.
  • La fonction console.log permet d’afficher du texte dans la console…logique :)

Je pense que vous avec donc une idée de ce que le code va donner… exécuter maintenant le script test.js avec la commande :

$> node test.js

Que s’affiche t-il dans l’écran de votre console ?

WTFComme vous avez pu le remarquer, la console affiche :

$> node test.js
toi
Coucou
$>

Étrange n’est-ce pas ? On aurait pu penser l’inverse, c’est a dire que l’interpréteur allait attendre la fin de la fonction setTimeout() avant de passer à l’instruction suivante afin de nous afficher "Coucou" suivit de "Toi".

Comment cela se fait-il ?

non_bloquantEn effet, le JavaScript est un langage asynchrone, c’est a dire que l’interpréteur ne vas pas attendre la fin de l’instruction si celle-ci n’est pas bloquante (boucle infinie, fonction synchrone, calculs…). Pour reconnaître les fonctions synchrones à celles asynchrones, il suffit de savoir si la fonction a un paramètre de type callback, c’est a dire qu’elle récupère en paramètre une fonction qu’elle exécutera (avec parfois certains paramètres) dès qu’elle aura fini ce qu’elle avait à faire.

Dans le cas de la fonction setTimeout, on lui a donné la fonction à exécuter quand elle aura fini d’attendre les X millisecondes précisées en 2eme paramètre.

Le meilleure exemple de fonction asynchrone sont les fonctions de type AJAX, en effet, elles appellent l’url donnée en paramètre et exécute la fonction donnée en callback en lui donnant en parametre le resultat de la page.

Vous avez donc vu rapidement le fonctionnement de Node JS, ce qu’il faut surtout retenir est qu’il n’attend pas la fin d’une instruction avant de passer à la suivante (sauf si celle-ci est bloquante). Je vous laisse imaginer des fonctions asynchrones qui appellent d’autres fonctions asynchrones et ainsi de suite… ça devient vite très lourd mais ne vous inquiétez pas, il y a des solutions pour permettre de garder un code assez clair et totalement asynchrone (gestions de promises, futures, defferer… mais j’en parlerai dans un prochain article).

III/ Première application en Javascript

appNous allons enfin commercer à faire notre première application avec Node JS !

Mais elle va ressembler à quoi notre application ?

Nous allons faire simple pour commencer….nous allons créer un serveur web en local écoutant sur le port 8080, il sera donc accessible depuis l’adresse http://localhost:8080/.

Quand on se rendra sur cette adresse, la page nous affichera : Salut tout le monde !

Nous allons créer un fichier app.js qui contiendra :

var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type': ‘text/html’});
res.write(‘Salut tout le monde !‘);
res.end();
}).listen(8080);
console.log(‘Serveur tourne sur http://localhost:8080/’);

Voici quelques explications du code ci-dessus :

  • var http = require(‘http’); -> on inclue la classe http (propre a Node JS), cette classe nous permet d’appeler la fonction pour créer un serveur web
  • http.createServer -> on appelle la méthode createServer() qui prend en paramètre (type callback) la fonction à exécuter quand le serveur a bien été créé. Vous pouvez afficher plus de détails sur les deux paramètres que récupère la fonction en faisant un console.log(req) et console.log(res).
  • res.writeHead -> on définit le header de la page renvoyée (res = response), 200 correspond a OK pour dire que tout s’est bien passé (404 pour un NOT FOUND par exemple).
  • res.write -> permet d’écrire dans le corps de la page
  • res.end -> permet de signaler au serveur que toutes les réponses pour le header et le body ont été envoyées.
  • .listen(8080) -> indique que le serveur va écouter les entrées sur le port 8080

Je vous invite à lire la documentation de Node JS pour mieux comprendre comment cela fonctionne (en anglais par contre) : http://nodejs.org/docs/v0.4.10/api/http.html

Maintenant il suffit d’exécuter notre script avec node :

$> node app.js
Serveur tourne sur http://localhost:8080/

Comme vous pouvez le remarquer, notre application est déjà terminée ! Rapide non ? Et encore ce n’est que le début, vous verrez dans les prochains articles comment créer une application web beaucoup plus riche. Voici une petite application que j’ai réalisé avec Node JS et que vous saurez faire dans peu de temps (ma connexion internet étant assez lente, l’application mettait pas mal de temps à répondre car elle était hébergeait sur internet):

Vous pouvez essayer l’application sur votre ordinateur en faisant :

$> git clone git://github.com/Atinux/liveBalls.git
$> cd liveBalls
$> npm install socket.io
$> node app.js

Puis rendez-vous sur http://localhost:8080/ avec deux navigateurs différents !

finishVoila le premier tutoriel sur Node JS est (deja) terminé, j’espère avoir été le plus clair possible et comme j’ai dit au début de l’article, n’hésitez pas à laisser un commentaire si vous avez quelques questions encore en suspends ou même pour me dire si vous avez apprécié ou non mon premier tutoriel sur Node JS :).

À propos de Atinux

Co-founder and CTO at Pantera Commerce, CTO Malea, blogger at Atinux.fr and founder @ToulouseJS. I love discovering new technologies and playing with JavaScript (mainly Node.JS and Backbone.JS). Voir tous les articles par Atinux

8 responses to “Tutoriel sur Node JS

  • nek

    J’adore ton article ! Merci beaucoup :) .

  • lexgothambaylock

    Moi j’adore surtout le fait que SYSTEMATIQUEMENT, chaque bloggeur de la toile (j’en suis à plus de 60 blogs sur le sujet, en 2 langues), explique comment installer node.js, que mettre dans le fichier serveur mais JAMAIS où mettre ce satané fichier.
    Je commence doucement à croire que chacun recopie peu ou prou le blog du voisin et que le tuto source a omis de préciser ce point.
    Désolé pour cette accusation probablement sans fondement théorique (mais empiriquement vérifiable) mais quand près de 60 tutos sur le même sujet évitent de manière systématique ce point précis, il y a des questions à se poser. Surtout quand les tournures pour éviter le point son parfois alambiquées. Chacun y va de son raccourci perso.
    Je suis prêt à croire qu’il y a une raison à cela mais je ne suis qu’humain et ignare.
    En tant que tel, mon explication me semble la plus probable, jusqu’à preuve du contraire.
    60 tutos et pas un pour dire où mettre ce satané fichier, c’est gros.

    Merci quand même pour avoir fait un billet qui dit exactement ce que 59 autres (jusqu’ici) ont dit aussi.

    Désolé pour le ton. Ca fait deux jours que je cherche et j’ai définitivement la haine.

    • Atinux

      Bon mon garçon on va se calmer, je suis l’un des premiers français à avoir fait un article sur Node.js, si tu veux en être sûr il te suffit de regarder la date de publication du tutoriel, le mien date d’à peu près un an…
      Et si sur les 60 articles que tu as lu, aucun ne précise où mettre le fichier, c’est peut être parce que c’est logique ! Tu le mets où tu veux ton fichier, c’est un fichier comme les autres, tu as juste à te mettre dans le même dossier que là où se trouve ton fichier (avec la console), et là tu exécutes : node nom_de_ton_fichier.js

      Si au lieu de te taper 60 tutoriels, tu avais juste essayé de comprendre et de tester par toi même tu l’aurai vite compris.

      Désolé pour le ton mais ça me tue les personnes qui critiquent sans raisons fondées, est-ce que tu as posé la question avant d’être agressif au moins ?
      Remercie plutôt tous les blogueurs qui prennent le temps pour essayer d’expliquer quelque chose qui n’est pas forcément facile et qui peuvent oublier d’expliquer certaines choses, mais au lieu de les blâmer, demande leur.

      Bien cordialement.
      Sébastien

      • lexgothambaylock

        Merci Atinux.
        Tout d’abord, votre "mon garçon", vous pouvez vous le garder car, à moins que votre photo date d’il y a 20 ans, je pense être plus âgé que vous et quand bien même, nous n’avons pas élevé les moutons ensemble.
        Mon ton est incendiaire, il est vrai mais il ne vous attaque pas en tant que personne, j’aimerais que vous fassiez de même à mon endroit.
        Cela dit:
        Il me semble avoir précisé qu’il pouvait y avoir des raisons à cela qui me dépassent (mais qu’à force, ça commençait à me mettre doucement en nage).
        En ce qui concerne le fait de comprendre, ce n’est pas inné de savoir où placer un fichier de serveur et je persiste à dire que c’est plus que curieux que personne n’en parle. J’insiste: personne.

        A savoir également que j’ai placé ce fichier un peu partout où ça me semblait plus ou moins logique et que son exécution ne mène à rien (pourtant le serveur est bien installé car un "node -v" me retourne bien la version du node en cours et qu’un console.log en ligne de commande s’affiche comme il faut).
        Quel que soit le fichier .js que j’execute, voici ce qui en sort:

        node.js:256
        throw e; // process.nextTick error, or ‘error’ event on first tick
        ^
        Error: The "sys" module is now called "util".
        at sys.js:1:69
        at NativeModule.compile (node.js:583:5)
        at Function.require (node.js:551:18)
        at Function._load (module.js:297:25)
        at Module.require (module.js:357:17)
        at require (module.js:373:17)
        at Object. (/home/admin/test.js:1:73)
        at Module._compile (module.js:444:26)
        at Object..js (module.js:462:10)
        at Module.load (module.js:351:32)

        Maintenant libre à vous de commenter ou non.

        Pour ce qui est d’avoir demandé, je ne fais que ça. Aucune réponse (sauf la vôtre) jusqu’ici.
        Force est de constater que les gens semblent plus prompt à se défendre qu’à aider (là aussi, c’est un constat empirique, pas une attaque personnelle, vous voyez la différence?)

        Pour conclure: oui j’ai été incendiaire, non je ne vous attaque pas, oui j’ai fait des suppositions mais oui j’ai dit que je pouvais avoir tort.

        Maintenant, de tout ça, vous faites évidemment ce que vous voulez.

        C’est votre blog après tout…

      • Nek (@Nekdev)

        Bonjour,

        J’ai 20ans. Je suis un pure néophite. Et j’ai réussi à configurer nodejs avec cet article. Donc franchement, s’énerver dans le vent comme ça c’est pas cool.
        Je te suggère de revoir ta façon de t’adresser aux gens !

        En ce qui concerne le placement du "fichier serveur", personne ne le précise puisqu’on s’en fiche royalement d’où il est >_< ! C'est tout comme exécuter un fichier php en console…

        Pour ton erreur, moi j’aurais bien aimé voir la ligne de commande qui te lance ça. Mais à priori ça vient de ton nodejs qui est pété, ça arrive très souvent sur les installations windows. Et si tu veux qu’on t’aide il va falloir être un peu plus précis que juste donner l’erreur… Qui n'est pas spécifiquement plus claire pour nous !

      • Atinux

        Cette erreur survient souvent (je l’ai déjà eu) quand on utilise la dernière version de node.js et un module pas mis à jour, vérifie que tu as bien mis à jour ton module en le supprimant puis en le re-installant comme ceci :
        npm install nom_du_module@latest

        Sinon, comme l’a dit Nek, c’est possible que ce soit l’installation de Node.js qui s’est mal passée.

  • Kev

    Ce gorille à un égo démesuré. Écoutes, tu blâmes la communauté parce que tu ne comprends pas comme lancer une application. Il y à des gens comme Atinux (et moi même), qui donne bénévolement de leur temps pour partager notre passion du Web et des technologies. Si tu n’a pas de patience, change de branche !

  • Xaber Azahiri

    Finalement, on le met où ce fichier? :)

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Suivre

Recevez les nouvelles publications par mail.

%d bloggers like this: