Node server : tout savoir sur la création de serveur et le fonctionnement

Rayed Benbrahim

Publié le 28 avril 2020

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.

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ée un ordre de lecture ou d’écriture.

Sauf qu’en attendant que la base de donnée 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 serveur
server.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.

Derniers articles

Dans l'univers du Big Data et du Cloud, Snowflake a vu le jour en étant le premier fournisseur d'un Data Warehouse sur le cloud 100% scalable. Dans cet article, découvrez ce qu'est un Data Warehouse et en quoi Snowflake est une solution innovante pour les entreprises.

Souvent portée par une équipe d'analystes, la QA vient supporter l'équipe tech pour assurer que les évolutions en cours de développement et récemment déployés ne viennent pas perturber l'application. Dans cet article, découvrez comment les méthodes Shift-Left et Shift-Right viennent se complémenter pour assurer un bon niveau de qualité du logiciel déployé.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton Mac et faire tourner tes premiers containers.

Docker Desktop est le client permettant de faire tourner des containers depuis son poste. Découvre ce tutoriel pour installer Docker sur ton PC Windows et faire tourner tes premiers containers.

Recruter un développeur passe forcément par une évaluation technique de ses compétences. Comment intégrer un test technique dans un processus d'embauche, suivant le niveau de seniorité ?

Mardi 15 Juin 2021, Vercel a dévoilé la version 11 du framework Next.js. Cette nouvelle version apporte des optimisations sur le plan des performances mais facilite également la collaboration entre développeurs et entre les différents partis prenants du projet.

Les Jobs