Passer au contenu principal

Coder un serveur node est beaucoup plus facile à faire qu’on peut imaginer. Appréhender son fonctionnement est une autre histoire. Pour faciliter votre compréhension des challenges auxquels vous ferez face une fois votre premier node server créé, il est important de comprendre comment il fonctionne.

Coder un serveur node est beaucoup plus facile à faire qu’on peut imaginer. Appréhender son fonctionnement est une autre histoire. Pour faciliter votre compréhension des challenges auxquels vous ferez face une fois votre premier node server créé, il est important de comprendre comment il fonctionne.

🧑‍🎓 Vous souhaitez apprendre à utiliser NodeJS 📖 ?
Practical Node vous enseigne les bonnes pratiques NodeJS pour être opérationnel dès le premier jour !

Que ce soit en node, en PHP ou peu importe le langage, une application ou un site web a besoin d’un serveur pour fonctionner. Ce serveur est un ordinateur – avec plus de puissance processeur et de mémoire RAM, mais sans carte graphique – qui est branché dans un datacenter et constamment allumé. Son rôle est de répondre aux demandes des utilisateurs et de leur livrer une page HTML ou de la donnée (au format JSON ou plus rarement XML).

Requête client vers serveur nodejs
Requête d’un client navigateur vers serveur

Node Server : pour quelle utilité ?

Pourquoi Node.JS pour le web ?

Contrairement à PHP, Ruby on Rails ou Java, un node js server tourne avec un seul thread. C’est-à-dire qu’il va performer une action à la fois. Par contre, un serveur node js n’est jamais en attente. Si la demande d’un client est chronophage, il a la capacité de lancer l’opération et passer aux suivantes sans attendre que celle-ci soit terminée. On appelle ça l’asynchrone.

Bons usages pour un node server

De ce fait, faire tourner une application ou un site web sur un node server peut se révéler très pertinent dans la mesure où les demandes sont des opérations d’input ou output. Quand on y pense, la plupart des applications ou site web ont pour vocation de vous afficher une donnée qui a été stockée dans une base de données ou de vous permettre d’insérer ou modifier de la donnée dans cette même base de données.

Par conséquent, votre serveur a besoin de traiter l’ordre que votre client (un navigateur, une application mobile, un objet connecté) vient de lui transmettre et de faire passer à la base de données un ordre de lecture ou d’écriture.

Sauf qu’en attendant que la base de données réponde – ce qui est plus ou moins rapide suivant la requête et le volume de données – votre node server va aller traiter les demandes des autres clients. Une fois qu’il a la réponse de votre requête, il va vous servir la réponse.

Limites d’un server node

Là où un serveur node est très fort pour répondre aux besoins de la plupart des applications web, il est nettement moins adapté pour des opérations gourmandes en ressources CPU. Traiter de grands jeux de données ou performer de longs calculs sera bien plus efficace en Python qu’en Node.

C’est une des raisons qui pousse les grosses applications web à se structurer autour de microservices. Pour une même application, un serveur node va être en charge de traiter les requêtes HTTP et sous-traiter la réalisation d’opérations plus complexes à d’autres services. Ces derniers pourront être développés dans un langage plus adapté.

Node Js create server : Comment créer un serveur node js ?

Avant de pouvoir créer un serveur node, assurez-vous d’avoir installé node.js. Si ce n’est pas déjà fait, voici les liens pour savoir comment faire suivant votre système d’exploitation:

Voici à quoi ressemble le code d’un node js web server extrêmement simple:

const http = require("http");const server = http.createServer(function(req, res) {  // A l'arrivée d'une requête  res.write("Hello World!");  res.end();})// Lancer le serveurserver.listen(3000)

En 5 lignes, vous avez de quoi recevoir les requêtes des clients et pouvoir leur répondre, du moins un Hello World !

Pour comprendre ce que ce code fait, on va décomposer les éléments importants:
La constante http nous permet d’importer le code venant du module “http” présent nativement dans nodejs.

const http = require("http");

Le module http est un objet javascript, contenant des données et des fonctions dont nous allons avoir besoin pour créer un serveur web.

const server = http.createServer(function(req,res){    // A l'arrivée d'une requête  res.write('Hello World');  res.end();})

Dans la suite de notre code, nous utilisons la fonction “createServer” présente dans l’object HTTP. Cette fonction prend en paramètre une callback, une fonction qui est invoquée au moment où la fonction qui l’appelle a terminé.

Cette callback prend 2 paramètres:

L’objet requête (req) qui va contenir les informations envoyées par le client comme, par exemple, l’URL, les paramètres (tout ce qui vient après le “?” dans une URL) ou le navigateur utilisé et sa version.

L’objet réponse (res) qui contient les éléments dont le client a besoin pour considérer sa requête comme terminée avec succès, ou le cas échéant l’erreur à communiquer à l’utilisateur.

Dans ce morceaux de code, on demande à notre node server de répondre à chaque requête qu’il va recevoir en affichant le text brut “Hello World !” puis signaler la fin de la réponse.

Pour lancer et tester votre node server sur votre machine:

  • Ouvrez votre terminal, naviguez jusqu’à votre répertoire
  • Créez un fichier server.js dans votre répertoire de travail
  • Collez le code
  • De retour sur votre terminal, tapez la commande node server.js
  • Ouvrez votre navigateur et tapez localhost:3000 pour lui envoyer une requête

Utiliser un Framework pour un meilleur node server

Vous avez réussi à lancer votre node server en local ? Bravo ! Seulement votre serveur ne sert à rien à part répondre un Hello World. C’est très bien pour un début mais maintenant vous allez vouloir ajouter des comportements différents suivant les actions des utilisateurs, stocker des données en base, gérer des sessions d’utilisateurs authentifiés ou non…

Pour développer une application plus complexe, inutile de tout faire en nodejs pur. On va utiliser un Framework.

Un framework est une librairie qui va abstraire le gros du boulot et rendre l’écriture de votre code serveur plus simple. Les frameworks nodejs les plus connussont Express, Nest, Koa parmi tant d’autres.

Le même node server en Express.js se présenterait comme ceci:

const express = require('express')const app = express()app.get('/', (req,res) => {  res.send('Hello World')})app.get('/health',(req,res) => {  res.send('I')})app.listen(8080,() => {  console.log("Server up and running")})

Nous commençons par importer le module express. Contrairement au module HTTP, Express n’est pas inclus avec node. Il faut télécharger ce paquet en utilisant npm via la commande suivante:

npm install express

La ligne suivante sert à lancer express et ses fonctionnalités dont on aura besoin pour coder notre node web server.

const app = express()

On commence par déclarer la première route. Lorsqu’un client enverra une requête HTTP “GET” à l’url `localhost:8080/`, notre serveur node lui répondra “Hello World”.

Une fois notre route déclarée, nous pouvons lancer le serveur et lui demander d’écouter le port 8080.

Aller plus loin

Maintenant, pour enrichir votre serveur, vous pouvez utiliser le routeur d’express pour déclarer de nouvelles routes, sur des requêtes GET, PUT, PATCH ou DELETE.

Vous pouvez également brancher une base de données Mongo ou SQL à votre server node en utilisant des packages comme MongoClient, Mongoose ou Sequelize.

Rayed Benbrahim

Auteur Rayed Benbrahim

Plus d'articles par Rayed Benbrahim

Laisser un commentaire