Depuis la démocratisation du Big Data, chaque entreprise s’oriente vers la digitalisation de leur activité, et cela ne fait que commencer. La programmation informatique est un domaine incontournable dans le monde dans lequel nous vivons actuellement grâce à cela. Se tourner vers le métier de développeur informatique, que ce soit backend, frontend ou full-stack est donc très intéressant. Si vous êtes un débutant, le développement d’applications web peut être un réel défi à relever. Toutefois, il existe un moyen efficace pour s’initier à cette pratique en utilisant NodeJS.
Dans ce tutoriel exhaustif, nous allons vous montrer comment développer des applications web avec le serveur Java script le plus populaire de notre époque : Node.js.
Node.js : c’est quoi ?
De manière très simple, Node JS est un serveur de JavaScript. C’est une plateforme qui permet de développer et déployer des applications JavaScript. Il est principalement utilisé pour créer des applications web qui permettent les échanges de données, par exemple une application de chat, des sites de streaming multimédia, etc.
Une application web est un programme qui n’est exécuté que sur un serveur, et l’application est accessible grâce à un navigateur client via internet. Une application web est composée de trois parties : client, serveur et base de données.
Architecture du serveur Node js
Node.js fonctionne sur l’architecture Single Threaded Event Loop ce qui lui permet de gérer plusieurs clients à la fois.
Examinons chaque partie de l’architecture Node.js :
Request
Les requêtes qu’un utilisateur envoie vers le serveur Node.js peuvent être bloquantes ou non bloquantes. Cela dépend de ce que l’utilisateur souhaite obtenir de l’application web.
La figure ci-dessous illustre les demandes envoyées par des utilisateurs au serveur :
Event Queue
La demande de chaque utilisateur est considérée comme un événement (Event) par le serveur NodeJS et ils sont regroupés dans la liste d’événements (Even Queue). NodeJS utilise la méthode FIFO (First In First Out). Cela veut dire que la première demande est la première à être traitée.
Event Loop
Une boucle infinie reçoit et traite les demandes puis les transmet aux Thread Pool. Les requêtes sont enregistrées par une fonction callback().
Thread Pool
C’est à ce niveau que se trouvent tous les threads disponibles pour traiter une demande du client.
À la fin du traitement d’une demande, NodeJS fait appel à la fonction callback() pour l’exécuter.
Parlons un peu de l’histoire de NodeJS
JavaScript est un langage de programmation créé par Netscape dans le but de manipuler leurs différentes pages web à l’intérieur de leur navigateur Netscape Navigator.
Netscape vend des serveurs web et possède un environnement appelé Netscape LiveWire qui a la possibilité de créer des pages dynamiques côté serveur grâce à JavaScript. Malheureusement, Netscape LiveWire a connu un échec et ce n’est que grâce à NodeJS que JavaScript côté serveur a véritablement été connu.
Créée en 2009 par Ryan Dahl, sa réussite est due à l’un des facteurs : le timing. NodeJS est arrivée au meilleur moment, mais il faut savoir que ce n’est pas une simple chance pour qu’il soit à ce niveau de réussite de nos jours.
Plusieurs librairies influencent NodeJS. On a, par exemple, Event Machine pour Ruby et Twisted pour Python. Node est venu pousser encore plus haut le modèle événementiel. Il prend la boucle événementielle comme un composant élémentaire en son sein et non comme une librairie.
Dans plusieurs systèmes, pour commencer une boucle événementielle, il faut d’abord effectuer un appel bloquant. Pour cela, on utilise à chaque début d’un script des fonctions de rappel et un appel bloquant comme EventMachine::run() qui démarre le serveur.
Ce n’est pas le cas dans NodeJS, car il n’y a pas d’appel pour commencer une boucle. Si Node JS trouve une boucle dans le script, il entre dans la boucle puis n’en sort que lorsqu’il n’y a plus de fonction de rappel à exécuter.
Les outils qui permettent d’utiliser Node.js
NodeJS à lui seul ne permet pas aux développeurs de développer une application complète, malgré les fonctionnalités puissantes qu’il propose. C’est pour cela qu’il faut quelques outils en plus.
Les meilleurs IDE de Node
Pour coder confortablement avec Node.js, il faut au préalable installer et configurer un bon environnement de développement intégré. Il existe plusieurs IDE, mais seulement trois d’entre eux se démarquent comme les meilleurs pour NodeJS :
Visual Studio Code
Il prend à lui seul 70% de la part du marché des développeurs JavaScript. Depuis sa version gratuite, beaucoup de développeurs se sont tournés vers cet éditeur à cause de sa simplicité et des nombreux plugins disponibles.
Webstorm
Cet IDE est très complet et toutes les fonctionnalités nécessaires pour développer en NodeJS sont disponibles. Mais il est lourd et demande un certain temps d’apprentissage afin d’être pris en main.
Atom
Celui-ci est développé par les équipes de GitHub. Grâce à ces différents plugins, il est possible d’ajouter les fonctionnalités nécessaires, mais d’une faible performance.
Vous pouvez également utiliser IntelliJ pour développer des applications en nodeJS.
Les outils pour les versions d’application
L’un des éléments fondamentaux en programmation informatique est la gestion des versions de programme écrit.
Arrivé à un niveau donné dans le processus du développement d’application, vous aurez besoin de comparer les anciennes versions de votre programme à la nouvelle ou encore de partager votre travail avec d’autres développeurs.
Pour cela il y a Git qui est le logiciel de version le plus utilisé au monde. Il fonctionne en mode Peer to peer. Le code du projet est stocké dans un serveur central et sur le système de chaque contributeur du projet.
Les outils de test pour NodeJS
Il est vraiment important de savoir tester vos codes en tant que développeur. En automatisant le test, votre code reste fonctionnel au fur et à mesure que vous codiez. Grâce au test fonctionnel et test unitaire vous serez averti si une nouvelle fonctionnalité vient casser votre code.
Pour faire ce test, il faut mettre dans votre code un ou plusieurs modules qui peuvent parcourir l’ensemble de votre code. Tous les langages ont une librairie qui se charge de ce test. Pour Node, nous avons par exemple Jest et Mocha.
Les outils de déploiement
La solution cloud est la meilleure pour déployer rapidement les applications NodeJS et pour bénéficier du moindre coût d’infrastructure pour l’utilisation.
Les solutions cloud proposent trois services principaux à savoir :
- IaaS (Infrastructure as a Service) : ce service propose aux développeurs un cadre prêt dédié pour leur travail. Il est évolutif selon le besoin des développeurs en termes d’espace de stockage, de bande passante et de puissance de calcul.
- PaaS (Platform as a Service) : en plus des fonctionnalités proposées par l’IaaS, celui-ci offre des ressources logicielles telles que les systèmes d’exploitation, les systèmes de gestion de base de données, etc.
- FaaS (Functions as a Service) : le fournisseur de service garantit l’exécution du code en fournissant les ressources nécessaires pour cela.
Installation de Node JS
La procédure d’installation de Node.js sur Windows est la même que pour la plupart des logiciels. Avant tout, rendez-vous sur la page de téléchargement Node.js et téléchargez le logiciel en choisissant la version correspondant à votre système d’exploitation.
Pour faire le bon choix de la version à installer, intéressons-nous d’abord à la différence entre la version LTS et la dernière version.
Différence entre la version LTS et la dernière version
Comme son nom l’indique, “la dernière version” est celle qui comporte les dernières fonctionnalités de Node.js. Il ne s’agit pas d’une version instable, mais bel et bien d’une version destinée à la production.
Mais pourquoi le site officiel de Node.js recommande-t-il la version LTS (Long Time Support) ?
Dans un article, Rod Vagg, un membre du groupe de travail LTS de Node.js, exprime les raisons de ce choix :
Le but d’établir une version LTS pour Node est de distribuer, au-delà du cycle habituel des mises à jour stables, des nouvelles versions avec un calendrier défini clairement à l’avance et un support sur une durée étendue. (…) Il s’agit d’un prérequis essentiel pour le développement d’applications d’entreprises.
D’un point de vue général, on a trois types de versions de Node.js :
- La version LTS est développée pour l’utilisation en entreprise. Dans ce cas, les critères en qualité et les longues périodes de test peuvent réduire considérablement la capacité à suivre des mises à jour fréquentes. Les versions LTS ont un support actif de 12 mois et une période supplémentaire dite de maintenance de 18 mois. Cette version est conçue pour éviter de casser l’exécution du code après une mise à jour, c’est ce qu’on appelle “breaking change”.
- La dernière version est mise à jour à chaque avril et octobre de l’année et le breaking change intervient. Il est donc important d’être capable de rendre son code compatible à la nouvelle version si vous voulez maintenir votre code à jour. Si vous êtes capable de suivre ces mises à jour sans aucun problème, vous pouvez choisir cette version.
- Enfin, la version Nightly est mise à jour toutes les 24 heures. Il faut l’utiliser avec prudence et elle n’est pas recommandée pour quelqu’un qui ne travaille pas activement sur le code source.
Passons à l’installation
Dans notre cas, nous allons procéder à l’installation de la version LTS. Comme d’habitude, cliquez sur Next à chaque fois :
Après toutes ces étapes, le programme d’installation vous demande de choisir les fonctionnalités ainsi que leur méthode d’installation :
Voici le rôle de chaque fonctionnalité proposée par le programme d’installation Node.js :
- “Node.js runtime” : le cœur de Node.js, il est obligatoire pour réussir à faire fonctionner Node ;
- “npm package manager” : c’est le gestionnaire de paquets officiel de Node.js. C’est grâce à lui que vous pouvez installer de nouveaux modules ;
- “Online documentation shortcuts” : c’est cette option qui ajoute des liens vers la documentation pour Node.js ;
- “Add PATH” : c’est ce qui vous permettra d’exécuter Node.js, npm et les modules installés globalement par npm dans l’invite de commande Windows.
Arriver ce niveau, il va lancer l’installation des dépendances de Node.js sur Windows. Il y a des modules qui nécessitent des outils tels que Python et Visual Studio build Tools pour qu’on puisse le compiler.
Bravo ! Vous avez réussi !
Une fois que vous avez cliqué sur Finish, une invite de commande vous demandera d’appuyer sur une touche pour l’installation des dépendances.
Comment installer de nouveaux modules node.js ?
Un module Node.js est un regroupement de fonctions et d’objets JavaScript qui utilisés par une application Node.js.
Un projet d’application est un paquet, les modules installés pour le développement du projet sont aussi des paquets à installer afin d’en utiliser les fonctions. Il faut noter qu’un paquet peut contenir plusieurs modules.
Vous pouvez passer par un gestionnaire de paquet pour installer un module Node.js sur Windows. Ce gestionnaire va s’occuper du téléchargement, de l’installation, de la configuration et de la gestion des mises à jour des modules pour vous.
Qu’est-ce que npm ?
npm est le gestionnaire de paquet officiel de Node.js qui vient avec Node.js depuis sa version 0.6.3.
Installer npm sur Windows
Vous n’avez pas besoin d’installer npm pour Node.js sur Windows, car il est déjà présent par défaut avec Node.js. Pour vérifier la version de npm installé sur votre système, tapez dans votre invite de commande :
npm -v
Pour voir si vous avez bien la dernière version de npm, tapez :
npm install npm -g
Comment installer un module Nodejs avec npm ?
Il y a deux options pour installer un module Node.js sur Windows : localement ou globalement.
Installer un module Node.js globalement vous donne la possibilité d’utiliser les fonctionnalités dans n’importe quel projet sur votre ordinateur. L’installation se fait grâce à la commande :
npm install -g nom_du_paquet
Mais si votre objectif est d’utiliser le module dans un projet précis, alors installez-le localement dans le dossier concerné avec :
npm install nom_du_paquet
Mettre à jour sa version de NodeJS
Avec juste une ligne de commande, vous pouvez mettre à jour la version de Node.js sur Linux. Mais sur Windows, vous devez télécharger la dernière version LTS et l’installer. Ainsi, on supprime automatiquement l’ancienne version.
Une alternative est d’installer le gestionnaire Chocolatey pour Windows pour la mise à jour de Node.js grâce à la commande :
choco upgrade nodejs -y
Et c’est bon, vous avez installé Node.js sur votre machine et vous avez maintenant toutes les cartes en main pour mener à bien votre premier projet !
Comment créer une application Node.js ?
Dans cette partie, vous allez découvrir comment développer une application web Node.js simple.
À la fin de cette partie, vous allez pouvoir :
- Créer un projet Node.js ;
- Mettre du code ;
- Passer par Intellisense pour la modification de code ;
- Lancer une application Node.js.
Les prérequis
Les conditions à réunir pour créer une application avec Node.js sont les suivantes :
- Installer visual Studio avec la charge de travail de développement Node.js. Si vous n’avez pas encore Visual Studio, téléchargez-le gratuitement ici et une fois installé, rendez-vous dans Outils>Fonctionnalités et choisissez la charge de travail Node.js development puis l’installer.
- Installer le runtime Node.js, la version LTS, cela est déjà fait dans notre cas.
Créer votre premier projet Node.js
Les fichiers de votre application sont organisés dans un dossier sur Visual Studio. Le dossier en question comporte le code source, les fichiers config et les ressources.
Dans ce tutoriel, vous allez apprendre à créer un projet simple comportant du code Node.js et d’une application Express.
Commençons ! Lancez Visual Studio, ensuite cliquez sur echap pour fermer la fenêtre de démarrage.
Faites la combinaison CTRL + Q et tapez node.js dans la barre de recherche, puis choisissez Basic Azure Node.js Express 4 application-JavaScript :
Configurez votre nouveau projet et cliquez sur créer :
Vous obtenez ceci :
Le volet gauche contient le fichier app.js et l’Explorateur de solution est du côté droit :
- (1) : c’est la solution qui possède par défaut le même nom que votre projet ;
- (2) : c’est le projet en question et le nom ici est « Première Appli ». Dans le dossier où se trouve tous les fichiers, le projet a une extension .njsproj. Vous avez la possibilité d’afficher et de définir les propriétés de projet et les variables d’environnement. Pour cela, il faut faire un clic droit et choisir des propriétés dans le menu contextuel ;
- (3) : le nœud NPM, dans ce dossier se trouve tous les packages installés. Vous avez la possibilité d’installer des packages NPM grâce aux boites de dialogue. Avec les paramètres de package, vous pouvez installer et mettre à jour des packages.
- (4) : s’affichent sous le nœud du projet. Le fichier de démarrage du projet, app.js, est affiché en gras. Pour pouvoir définir le fichier de démarrage, cliquez sur le bouton droit sur un fichier du projet et en sélectionnant Définir comme fichier de démarrage de Node.js.
- (5) : c’est le package qui gère les dépendances et les versions des packages installés localement.
Vérifiez si tous les packages requis sont installés en ouvrant le nœud NPM. Si certains packages sont manquants, alors faites un clic droit sur le nœud NPM et sélectionnez l’option installer des packages NPM.
Ajouter du code
Pug est le framework JavaScript frontend utilisé par l’application. Le code dans Pug est simple et à base de balises compilé en HTML.
Procédons toujours par étape :
- Allez dans le dossier view au niveau de l’explorateur de solution, puis lancez le fichier index.pug ;
- Remplacez le contenu par le code suivant :
extends layout
block content
h1= title
p Welcome to #{title}
script.
var f1 = function() { document.getElementById('monImage').src='#{data.element1}' }
script.
var f2 = function() { document.getElementById('monImage').src='#{data.element2}' }
script.
var f3 = function() { document.getElementById('monImagee').src='#{data.element3}' }
button(onclick='f1()') One!
button(onclick='f2()') Two!
button(onclick='f3()') Three!
p
a: img(id='monImage' height='300' width='300' src='')
Le code ci-dessus crée dynamiquement une page HTML avec un titre et un message de bienvenue. Cette page change d’image à chaque fois que vous appuyez un bouton.
- Ouvrez ensuite le fichier index.js qui se trouve dans le dossier route et collez ce code :
var getData = function () {
var data = {
'element1': 'https://images.unsplash.com/photo-1563422156298-c778a278f9a5',
'element2': 'https://images.unsplash.com/photo-1620173834206-c029bf322dba',
'element3': 'https://images.unsplash.com/photo-1602491673980-73aa38de027a'
}
return data;
}
Ce code crée un objet de données. Ce dernier est passé dans la page HTML générée dynamiquement.
- Remplacez la fonction router.get dans index.js par le code suivant :
router.get('/', function (req, res) {
res.render('index', { title: 'Express', "data" });
});
Ce code définit la page à afficher grâce à l’objet de routeur Express et renvoie aussi le nom de la page ainsi que l’objet donné. Le code lance le chargement de la page index.pug lors de l’exécution d’index.js. Et index.js est l’itinéraire par défaut.
Pour vérifier les différentes fonctionnalités de Visual Studio, il se trouve une erreur commise délibérément dans la ligne de code contenant res.render .
C’est là que vous aurez besoin de IntelliSense afin de corriger l’erreur pour que l’application s’exécute normalement.
IntelliSense
Il s’agit d’un outil de Visual Studio qui aide à écrire du code. Pour l’utiliser,
- Allez dans le fichier index.js à la ligne contenant res.render ;
- Placez le curseur après “data” et saisissez get ;
- Une liste déroulante s’affiche, choisissez getData().
- En supprimant par exemple la virgule avant “data”, une surbrillance verte s’affiche en bas de l’expression “data”. En pointant sur l’expression IntelliSence nous donne l’erreur.
Lancer l’application
Pour lancer l’application avec le débogueur Visual Studio, il faut définir un point d’arrêt.
Définir un point d’arrêt
Pour toute procédure de débogage fiable, il faut définir le point d’arrêt. Il faut indiquer à Visual Studio Code où il doit s’arrêter lors de l’exécution du code.
Pour définir un point d’arrêt, rendez-vous dans index.js et à la ligne d’arrêt de votre choix. Faites un clic droit dans la marge gauche, puis choisissez ajouter un point d’arrêt. Ici, nous allons prendre la ligne de code :
res.render(‘index’, { title: ‘Express’, « data »: getData() });
Exécuter l’application
Voici les étapes que nous allons suivre pour exécuter notre application :
- Choisissez la cible de débogage dans la barre d’outils Déboguer, par exemple serveur web (Google Chrome) ou serveur web (Microsoft Edge).
- Si votre débogage préféré n’est pas disponible en tant qu’option, cliquez sur Parcourir avec dans la liste déroulante cible et choisissez-le.
- Cliquez sur F5 ou choisissez Déboguer > Démarrer le débogage pour lancer l’application. L’exécution du code s’interrompt au point d’arrêt prédéfini afin d’inspecter l’état de votre application.
- Mettez le curseur sur getData pour afficher ses propriétés dans un Data Tip :
- Appuyez sur F5 ou sélectionnez Déboguer > Continuer pour continuer à exécuter l’application. L’application s’ouvre dans un navigateur. Dans la fenêtre du navigateur, vous devriez voir Express comme titre et Bienvenue dans Express comme premier paragraphe.
- Vous pouvez cliquer sur les boutons One!, Two! et Three! Pour afficher les différentes images :
Comment connecter la base de données à NodeJS ?
Vous allez voir comment connecter une base de données à un projet Node. Dans notre cas, nous allons nous rendre dans le dossier où se trouve notre projet ci-dessus nommé PremiereAppli et installer MySQL. Pour cela, ouvrez votre invite de commande :
Une fois dans le répertoire, installez MySQL grâce à cette ligne de commande :
npm install mysql
Une fois cette opération faite, vous allez constater un nouveau dossier node_module dans votre répertoire :
Si c’est le cas, cela veut dire que la bibliothèque est bien installée dans le projet. Passons à un exemple, essayons de nous connecter à la base de données.
Pour cela, créez un fichier connection-exemple.js. Et collez le code suivant :
var mysql = require('mysql');
console.log('Get connection ...');
var conn = mysql.createConnection({
database: 'mytestdb',
host: "localhost",
user: "root",
password: "12345"
});
conn.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
Exécutez le fichier avec la commande : node connection-exemple.js
Après l’exécution de la commande, vous aurez un message d’erreur comme suit :
Cette erreur est simplement due à la version de Mysql que vous utilisez. Vous utilisez en ce moment une version plus récente de Mysql.
Le plugin d’authentification utilisé par les anciennes versions de Mysql est SHA256_PASSWORD et la toute nouvelle version Mysql utilise SHA2_PASSWORD. NodeJS. Mysql n’est pas encore mis à jour et utilise toujours les plugins comme SHA256_PASSWORD.
La solution à cette erreur est de lancer la fenêtre « MySQL Command Line Client » et d’exécuter la commande suivante :
# Syntax:
ALTER USER 'my_username'@'my_host' IDENTIFIED WITH 'mysql_native_password' BY 'my_password';
# Example:
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '12345';
Quel est le meilleur framework de Node.js ?
Si le développement d’applications web est facile et rapide avec Node.js, c’est grâce à sa compatibilité avec de nombreux autres modules. On trouve parmi ces modules Express.js qui est le framework populaire de Node.js.
Express est un framework souple et flexible écrit en JavaScript et qui regroupe des fonctionnalités de base. Il n’a pas une interface en ligne de commande, ni une architecture suggérée, ni un ORM qui pourra garder les performances optimales tout en facilitant la conception d’un serveur Node.
Le but d’Express est de donner plus de liberté aux développeurs dans le choix des modules à déployer dans le projet.
Par exemple, les frameworks tels que Rails pour Ruby et/ou Django pour Python exige l’utilisation d’un système de gestion de base de données. Avec Express, le développeur va juste importer la librairie qui correspond à son choix personnel : MongoDB, MySQL, Cassandra, Neo4, etc.
Les avantages de Node.js
Il existe de nombreux avantages qui pousse à utiliser Node.js pour un projet de développement web :
JavaScript sur un serveur
Le langage utilisé est du JavaScript, le même que pour le côté frontend. Donc nul besoin d’apprendre un nouveau langage, car très souvent, le langage pour coder le côté frontend est différent de celui utilisé pour le backend. En plus, les deux parties seront faciles à synchroniser en raison d’un même et seul langage utilisé.
Forfaits
Node.js a un écosystème riche. Sur NPM, des milliers de bibliothèques et d’outils sont regroupés pour le développement JavaScript.
La communauté NodeJS
La communauté de Node.js ne cesse de grandir. En 2015, les entreprises comme IBM, Microsoft, PayPal ont mis sur pied une fondation Node.js. Son but est de faciliter le développement des outils principaux de Node.js. Cette communauté est très vaste. Elle fournit des solutions et des guides à suivre pour résoudre chaque problème sur GitHub.
Flexible et modulable
La plateforme est souple et ne contient pas assez de fonctionnalités intégrées, il revient à vous de choisir les modules à lui greffer.
Il est non bloquant
Avec NodeJS, les tâches s’enchainent sans être obligées d’attendre la fin de la précédente avant d’enchainer une nouvelle.
Ses inconvénients
Mais malgré tout cela, Node.js n’est pas une solution miracle, il présente aussi quelques inconvénients :
Sur le processeur
Node.js fonctionne sur un modèle d’entrée-sortie non bloquant pour le traitement des demandes, d’où le mono thread. Node.js n’arrive pas à traiter des tâches simples comme lire des requêtes de base de données. Il doit d’abord bloquer le thread principal.
Quand il y a une demande de calcul lourde, Node.js bloque les autres demandes sur le thread, ce qui provoque un retard global.
Difficulté à fonctionner avec les bases de données relationnelles
Beaucoup des développeurs signalent qu’il n’est pas facile d’utiliser Node.js avec des bases de données relationnelles.
L’interface API change à tout moment
L’une des difficultés majeures avec Node.js est son interface API instable. Les développeurs ont du mal à modifier constamment le code de base de leur programme pour qu’il soit compatible avec la nouvelle version d’API.
Enfin, il faut que vous reteniez que l’outil puissant et léger pour les développeurs web full-stack est Node.js. Et comme tout autre outil, il a ses défauts, mais la communauté et les grandes entreprises le prennent fortement en charge afin de faciliter son utilisation.
Voilà, nous sommes arrivés à la fin de ce tutoriel et vous pouvez maintenant utiliser Node.js pour le développement de vos futurs projets. Si vous avez des questions ou des remarques, n’hésitez pas à les écrire en commentaires. En attendant, nous vous proposons également cette formation sur Spark pour que vous puissiez acquérir des compétences supplémentaires en Big Data en tant que Data Engineer.