Introduction

Présentation

Dans ce tutoriel, nous allons créer, pas à pas, une application web ; plus précisément un forum en temps réel.

Question

Qu’est-ce que c’est ? De quoi ça a l’air ?

Voilà des questions que vous vous posez sûrement déjà. Pour entrer en matière et trouver une réponse, vous pouvez visionner cette vidéo :



Enjeux

Maintenant que vous avez une idée plus précise de notre projet, ses enjeux peuvent être énumérés.

NodeJS côté serveur

Ce tutoriel vous permettra de créer une application web d’un autre genre. En effet, le code côté serveur des forums habituels est souvent le PHP. Cette application innove en utilisant du nodeJS. Ce langage a plusieurs avantages par rapport au PHP :

Important

Il est orienté sur les événements.

Contrairement au PHP, le javascript agit en grande partie de manière asynchrome (ou “non-bloquante”), c’est-à-dire qu’il exécute les instructions qui se trouvent dans le code de façon dynamique.

Prenons un exemple : si nous voulons charger plusieurs fichiers à l’aide d’un script PHP, le code (appelé code bloquant) s’occupe de charger les fichiers les uns après les autres.

En revanche, en javascript, le code s’exécutera en créant tout simplement des événements pour chaque téléchargement. Ainsi, plusieurs téléchargements seront simultanés. Lorsqu’un téléchargement est terminé, nous appeleons alors une fonction de callback (fonction de retour) qui dit au programme ce qu’il doit faire avec le fichier.

Pour illustrer cet exemple, voici une image :

_images/1.png

En prenant le simple exemple d’un chargement de fichiers, nous entrevoyons déjà l’énorme avantage de la programmation événementielle. En PHP, si un fichier à télécharger provient d’un serveur à bande passante très lente, le script se contentera d’attendre que le téléchargement soit terminé pour exécuter d’autres instructions. Par contre, en nodeJS, le script aura peut-être déjà terminé l’exécution des autres quand ce fichier sera téléchargé. Nous constatons donc que cela représente un gain de temps non-négligable :

_images/2.png

Question

OK, le nodeJS est utile pour télécharger des fichiers ; mais a-t-on besoin de télécharger des fichiers pour créer un forum ?

En effet, le forum ne nécessite pas beaucoup de chargements de fichiers, mais le nodeJS contribue à significativement accélérer sa vitesse.

Un exemple : lors d’une requête SQL vers la base de données, le code va crée l’événement qui concerne cette requête, puis exécute d’autres instructions (par exemple : préparer la page qui doit être envoyée à l’utilisateur). Lorsque le résultat de la requête est retourné, il n’a alors plus qu’à envoyer la page toute prête à l’utilisateur.

Important

Il est très rapide.

En plus de son mode asynchrome, le nodeJS est connu pour avoir d’excellentes performances, notamment grâce au moteur V8 de Google Chrome.

Important

C’est un langage de bas niveau avec une gestion native du HTTP

Avec le nodeJS, vous gérez aisément les routes vers les pages web et le format des URL. Ainsi, plus besoin d’installer des programmes tels qu’Apache et des frameworks pour le faire.

Javascript côté client

Pour réaliser ce forum, nous utiliserons également beaucoup de javascript. Ce langage nous permet de concrétiser la notion de temps réel ; grâce à lui, des modifications peuvent s’effectuer sur une page sans que l’utilisateur aie besoin de recharger celle-ci. Le javascript, employé avec nodeJS, utilise exactement le même langage sur le code côté serveur et sur le code côté client. Ainsi, nul besoin d’apprendre la syntaxe du javascript, puisque c’est la même que celle du nodeJS.

Grâce à la pratique constante du javascript et du nodeJS, vous deviendrez plus expérimentés dans ce langage et vous découvrirez peut-être une nouvelle manière de créer des applications web.

Socket.io

Socket.io n’est pas un langage à proprement parler, car il utilise du javascript. Ce module nodeJS permet de relier le client et le serveur avec une communication bidirectionnelle asynchrome.

Question

Une communication bidirectionnelle asynchrome ?

Il s’agit d’une sorte de “tuyau” de communication qui permet au client d’envoyer directement des éléments au serveur, et vice-versa.

_images/31.png

socket.io est bidirectionnel ; c’est ce qui explique la flèche qui va dans les deux sens. Le client et le serveur sont ainsi toujours en contact et peuvent s’envoyer des requêtes dans les deux sens. Le mot “asynchrome”, quant à lui, signifie que socket.io se base sur les événements et les fonctions de rappel. Un exemple concret : lorsque le serveur envoie un message au client, le client exécute une fonction qui affiche le message sur la page.

Lorsque vous aurez utilisé socket.io pour créer cette application, vous maîtriserez un système très efficace pour actualiser des données en temps réel sur une page sans recharger celle-ci. Ce système peut en effet s’appliquer de nombreux programmes : un chat, un système d’édition collaborative de documents, une présentation à distance... Dans l’application que nous allons créer, il servira à actualiser les messages d’une discussion en temps réel.

MySQL

Dans presque chaque application qui stocke des données, nous avons besoin d’une base de données. Et en l’occurence, nous utiliserons MySQL.

Question

Pourquoi utiliser MySQL et non pas d’autres systèmes de gestion de bases de données ?

MySQL a plusieurs avantages : il est gratuit, le système de gestion de base de données est relationnel et il existe un module (node-mysql) très complet qui permet de travailler avec les bases de données de ce type en nodeJS.

L’écriture de nombreuses requêtes SQL améliorera vos compétences dans ce domaine. Vous parviendrez alors plus aisément à organiser vos données, à les trier et à récupérer ensuite celles dont vous avez besoin pour les transmettre à l’utilisateur de votre application.

Bootstrap

Vous rêvez de réaliser un site web au design propre mais vous n’avez pas assez d’idées et d’expérience avec CSS ? Alors bootstrap est fait pour vous ! Bootstrap est un framework CSS qui donne accès à une très grande quantité de directives CSS qui modifient l’apparence une page web. Il est entièrement compatible avec le responsive design (il aide même grandement à la création d’un site web responsive).

Question

Un site web responsive ? Qu’est-ce que c’est ?

C’est tout simplement un site web qui s’adapte à la taille de l’écran depuis lequel on le visite. Pour illustrer ce concept, voici une image d’une page du forum pour un petit écran (à gauche) et pour un plus grand écran (à droite) :

_images/exemple_responsive.png

Bootstrap aide donc à créer un site web responsive, notamment grâce à son système de grilles. Connaître ce framework vous permet de mieux appréhender le responsive design et d’apprendre à réaliser un site web avec un design moderne et uniforme.

HTML et CSS

Quasiment obligatoires lorsqu’il s’agit de créer un site web, ces langages sont aujourd’hui à la base du côté client de n’importe quelle application web. Les travaux pratiques de ce tutoriel vous permettront d’approfondir vos connaissances dans ces langages pour ainsi modifier aisément l’esthétique de votre page.

Tout cela vous donne envie ? Alors commençons l’apprentissage !

Pré-requis

Tout d’abord, pour comprendre ce tutoriel, il est nécessaire de connaître la base des quelques langages énumérés ci-dessous :

HTML et CSS : Vous apprendrez ces langages en lisant ce cours. Il est important de lire l’intégralité des parties concernant le HTML. Pour le CSS, des notions de base suffiront.

Bootstrap : Si vous comprenez bien l’anglais, la documentation de bootstrap vous donnera les notions dont vous aurez besoin pour réaliser ce tutoriel, le principal étant de connaître le système de grilles, les formulaires, les boutons et la barre de navigation. Nul besoin de savoir tout ce qui concerne le javascript, car nous utiliserons bootstrap uniquement pour mettre en forme les pages. Par ailleurs, si vous désirez lire un cours en français, vous pouvez utiliser celui-ci.

Javascript : Il est important de connaître la syntaxe de base du javascript et d’être capable de manipuler l’arbre DOM d’une page HTML. Plusieurs cours proposent cet apprentissage :

NodeJS et socket.io : Les notions de base de ces technologies sont expliquées dans ce cours. Le reste sera abordé dans ce tutoriel.

Avertissement

Il est essentiel de lire les lignes sur expressJS et EJS afin de comprendre le fonctionnement d’EJS ; ce module sera souvent utilisé dans ce tutoriel.

MySQL : Grâce à ce cours d’openclassrooms, vous apprivoiserez les bases du langage SQL. Toutefois, ne vous perdez pas dans toutes les sections de ce cours. Il vous suffit de savoir insérer, modifier et supprimer des données. Pour créer un dialogue entre la base de données et le script nodeJS, la lecture de la documentation sur node-mysql vous sera bénéfique. De plus, vous devrez savoir utiliser l’interface de phpmyadmin.

Les expressions régulières : La première et la deuxième parties d’un cours d’openclassrooms les concernant vous expliquerons comment comprendre et utiliser les expressions régulières en javascript