Retourner à la page d'accueil de TJS

Introduction à Node.js, JavaScript sur le serveur

Introduction

Node.js permet d'exécuter du JavaScript, à partir du moteur de Chrome, en dehors du contexte du navigateur, comme on pourrait lancer un programme en PHP ou Python en lignes de commande sur le serveur. Node.js

Node.js fonctionne sur les principaux systèmes d'exploitation (macOS, Linux, Windows, Docker).

Le premier intérêt d'utiliser du JavaScript côté serveur est que vous connaissez déjà les principes et la syntaxe du langage, facilitant l'apprentissage et améliorant votre efficacité.

L'autre intérêt est que Node.js est largement employé par la communauté des développeurs web. Il simplifie l'utilisation de tous les plugins et frameworks JavaScript en automatisant leur installation et leurs mises à jour avec 1 ligne de commande.

Installation détaillée

L'installation sur un serveur est toujours un peu plus délicate que l'utilisation d'un framework JavaScript (comme jQuery qu'il suffit de supprimer pour s'en débarrasser.)

Nous allons voir l'installation sur un environnement Windows et Mac (pour faciliter les tests en local) et sur un environnement Linux (pour pouvoir être déployé en réel sur un véritable serveur en exploitation).

Commençons par télécharger Node.js sur sa machine depuis le site officiel, en choisissant bien sûr le format adaptée à son matériel.

Il existe, comme souvent dans le monde serveur, 2 types de versions :

  • La version LTS pour Long Term Service, assure une une maintenance par l'éditeur sur plusieurs années, à privilégier pour les usages sur des serveurs de production.
  • La version la plus à jour, sans garantie de suivi, qui est plutôt destinée aux tests, aux analyses de performances, à la veille techno, ou aux usages privés.

L'installation sous Windows

Pour Windows, l'assistant d'installation est la solution la plus simple. Il suffit de suivre les étapes à l'écran pour lancer et finaliser l'installation en quelques secondes. N'oubliez pas de valider la demande de droit administrateur pour finaliser l'assistant.

Une installation serveur est toujours à risque car il s'agit d'un exécutable avec tous les droits sur votre machine. Soyez donc sûr d'utiliser une source officielle pour télécharger votre outil.

Voici les vignettes des étapes d'installation sous Windows :

L'installation sous Mac

Sous Mac également, un assistant d'installation facilite le travail. Télécharger le .pkg sur le site officiel et exécutez-le. Voici les vignettes des étapes de l'installation :

L'installation sous Linux

L'installation sous Linux varie selon la distribution. Sous Ubuntu, il suffit de taper ces 2 lignes de commandes dans un terminal :

  sudo apt-get update
  sudo apt-get install nodejs npm

La première ligne met à jour la liste des modules installable depuis la base de données de l'éditeur de la distribution.

La seconde ligne télécharge les sources de Node.js et de npm

En quelques secondes, Node.js est installé.

La console Node.js

L'usage de la console sous Windows

La console Windows est appelée par cmd.exe. Tapez cmd dans la barre de tâche et double-cliquez sur la ligne de programme cmd.exe.

La console apparaît :

Tapez node + [Enter] pour entrez dans la console de Node.js :

Vous pouvez tapez des instructions qui s'exécuteront et afficheront leur résultat :

On note que l'affectation d'une variable retourne undefined mais que l'action est bien réalisée.

Pour sortir de la console Node.js, tapez .exit

L'usage de la console sous Mac

La console sous Mac s'appelle terminal. Les utilisateurs de Mac s'en servent de temps en temps pour réaliser par exemple des opérations qui n'ont pas d'interface graphique dans le système.

L'usage de la console sous Linux

Si vous utilisez Linux, la console et les lignes de commande ne vous font pas peur.

Tapez dans un terminal la commande

  node --version	

Le numéro de version de Node.js s'affiche.

Exécuter un script

Le plus simple pour utiliser Node.js est de l'appeler avec un fichier .js en paramère. Node.js exécutera le fichier d'instructions.

Créez un répertoire dédié à vos travaux Node.js
Créez un nouveau fichier monfichier.js dans de répertoire.
Placez-vous dans ce répertoire dans la console du système d'exploitation (avec l'instruction cd emplacement) Pour lancer son exécution tapez dans la console

node monfichier.js
Par exemple avec monfichier.js qui contient cette boucle de calcul et qui affiche le temps nécessaires pour la terminer :
/* Script de benchmark simpliste pour CPU */
var nb=5000000;
var t1=new Date();
var somme=0;
for (var i=0; i<nb; i++) {
  somme+=Math.cos(i);
}
var t2=new Date();
var ms=t2.getTime()-t1.getTime();
console.log("Temps de la boucle pour "+nb+" itérations : "+ms+" ms");

On obtient dans la console :

Attention, certaines fonctionnalités habituelles de JavaScript (accès aux éléments HTML, taille de la fenêtre courante, gestion des Cookies…) seront logiquement inopérantes, puisque nous ne sommes pas ici dans le contexte d'un navigateur.

L'instruction console.log(valeur), au lieu d'écrire dans la console JavaScript du navigateur, va afficher les informations directement à l'écran.

Performances

Exécuter, sur la même machine, ce mini benchmark dans Node.js ou dans le navigateur rendra les mêmes résultats. Node.js n'est pas plus performant que votre navigateur.

Copiez-collez le code source dans la console du navigateur et vous obtiendrez ce type de résultat :

Les modules personnalisés

Afin d'organiser votre code, il est possible d'utiliser la fonctionnalité de modules proposée par Node.js pour réutiliser un groupe de fonctions dans plusieurs fichiers. Le principe est le même que les instructions include ou require de PHP ou l'appel à <script src="monModule.js"> en HTML.

Créez un fichier monModule.js comportant une fonction "exportée" :

function fonctionTresUtile() {
  console.log("Ceci s'affiche depuis une fonction exportée de monModule.js !");
}
exports.fonctionTresUtile = fonctionTresUtile;

Dans le même répertoire, créez un fichier script.js contenant :

const monModule = require('./monModule'); 
// Permet l'accès aux fonctions définies dans monModule.js
// Notez que le ./ est indispensable

monModule.fonctionTresUtile(); 
// exécute la fonction exportée

Lancer script.js :

Les modules internes

L'usage des fonctionnalités internes reprend le principe des modules.

Utilisons le module http qui permet de créer un serveur web.

const http = require("http"); 
// http est un objet qui porte les définies dans le module http
// Notez qu'il n'y a pas de ./ pour les modules internes

// Création du serveur
const server = http.createServer((requete, result) => {
  result.statusCode = 200;
  result.setHeader("Content-Type", "text/html");
  result.end("Bonjour depuis Node.js !");
  console.log(requete.method+" "+requete.url);
  console.log("  "+requete.headers['user-agent']);
});

// Déclaration de l'ip et du port de notre serveur web
const hostname = '127.0.0.1';
const port = 3000;

// Lancement de l'écoute du serveur
server.listen(port, hostname, () => {
  console.log(`Serveur web lancé à l'adresse http://${hostname}:${port}/`);
});

Ce qui donne au lancement :

L'adresse http://127.0.0.1:3000/ retourne "Bonjour depuis Node.js !".

Dans la console, on voit la liste des paramètres de la requête et le navigateur utilisé. Notez qu'un autre appel automatique du navigateur va chercher l'icone favicon.ico qui apparait dans l'historique de la console.

Il faut expliquer quelques syntaxes :

const déclare une constante, c'est-à-dire une variable qui ne changera plus de valeur lors de l'exécution du script.

La partie

(requete, result) => { /* instructions */ }
définit une fonction qui possède les paramètres requete et result.

La ligne

`adresse http://${hostname}:${port}/`
déclare une chaîne de caractères et remplace ${maVariable} par le contenu de maVariable.
La syntaxe équivalente serait :
"adresse http://"+hostname":"+port+"/"

Pour arrêter un programme Node.js, tapez [CTRL] + C dans la console.

Naturellement, il est inutile de vouloir réécrire un serveur web. Ce gros travail a déjà été fait et il faut une seule ligne pour l'installer !

Nous allons voir dans la page suivante l'intérêt de npm, Node.js Packets Manager, installé automatiquement avec Node.js

Tutoriel écrit par Frosty et webmaster mis à jour le

Chercher une fonction, un objet, ...

Le 17/11/2017 22:30:39 sur php7 en 10.92 ms