Un serveur web basique en Node.JS

Bonjour à vous chères lecteurs,
Aujourd’hui nous allons voir comment monter un serveur web basique en NodeJs.
C’est parti !

Petits rappels

Habituellement, le langage le plus utilisé pour développer des serveur web est le PHP. Accompagné généralement d’Apache pour gérer la distribution des requêtes, ils représente une part importante des serveur web présents sur le net aujourd’hui.
Heureusement pour nous, d’autres langages peuvent être utilisés à cette fin. On peux citer Python, Javascript, Ruby, Rust …
Ici nous allons lancer notre serveur web directement avec le cli Nodejs sans surcouche Apache ou Nginx. Il nous faudra donc accéder à notre serveur via une url (ou ip) et un port.

Maintenant ce petit rappel fait, passons au code !

Le serveur web

Voici donc le code d’un serveur web en NodeJs:

const http = require('http');

http.createServer(function (req, res) {
  console.log(`${req.method} ${req.url}`);
  res.end('hello world!');
}).listen(3000);

console.log('Le serveur écoute le port 3000');

Copiez le dans un fichier index.js et lancer le avec la commande suivante:

nodejs index.js

Voici ce que l’on obtiens dans notre console:

Lancement de notre serveur web
Lancement de notre serveur web

Notre serveur est donc lancé, allons voir sur un navigateur, adresse localhost:3000 :

Version web !
Version web !

Voilà, rien de plus simple. Notre serveur web est lancé !
Maintenant on va expliquer un peu ces lignes de code afin que vous puissiez voler de vos propres ailes.

Explications

C’est parti on reprend le code ligne par ligne:

const http = require('http');

On commence notre code par importer la librairie http qui contient tout le nécessaire pour créer rapidement un serveur web basique.
On créer une variable http et on lui affecte la librairie.

http.createServer(function (req, res) {
  console.log(`${req.method} ${req.url}`);
  res.end('hello world!');
}).listen(3000);

Là ça se complique plus.
Tout d’abord on reprend notre objet http créé juste avant, puis on appel dessus une méthode de la librairie: createServer.
Comme décrit très bien le site w3schools avec cette page, cette méthode prend pour paramètre (qui est optionnel) une « requestListener », c’est à dire une fonction qui sera exécuté à chaque appel de la méthode createServer.


Cette fonction sera donc anonyme (elle ne porte pas de nom) et nous permettra de gérer ce qui s’affiche dans le navigateur à chaque appel de l’url.
Ici nous affichons dans la console du serveur la méthode de la requête (GET si vous y accèder dans un navigateur) et l’url à laquelle on essaye d’accèder.

Voici un exemple des logs de mon serveur lancé alors que j’y accède plusieurs fois sur mon navigateur:

Logs du serveur web
Logs du serveur web

Enfin, on vois que j’appelle la méthode listen avec comme paramètre un numéro qui correspond au port que je veux que prenne le serveur web.
Il est important de comprendre ici que j’appelle la méthode listen non pas sur l’objet http, mais sur l’objet créé par la méthode createServer.
La méthode créer un objet de type HTTP Server Object, c’est sur cet objet que j’appelle listen !

console.log('Le serveur écoute le port 3000');

La partie la plus simple, une fois le serveur créé, on affiche dans la console du serveur le message « Le serveur écoute sur le port 3000 ».

Pour aller plus loin

Il est bien sûr évident qu’un serveur web capable uniquement d’afficher « Hello world » quand on se rend sur la page n’a pas beaucoup d’utilité !
Voici donc quelques idées pour améliorer ce serveur:

Afficher des pages différentes en fonction de l’url

On dispose de l’url tapé par l’internaute dans req.url, on peut donc faire des conditions dessus et afficher des contenus différents en fonction de l’url tapée !
Exemple:

const http = require('http');

http.createServer(function (req, res) {
  if(req.url === "/super-page"){
     res.end("Ma super page !");
  }else if(req.url === "/information-importante"){
     res.end("Une information super importante !!!");
  }else{
     res.end('hello world!');
  }
  console.log(`${req.method} ${req.url}`);
}).listen(3000);

console.log('Le serveur écoute le port 3000');

Renvoyer un peu plus que du simple texte

Je ne sais pas vous, mais je ne vois plus trop de site qui affiche du simple texte…
Vous pouvez essayer de retourner à l’internaute une page HTML qui contiendra du style, du javascript afin de rendre le tout un peu plus jolie et dynamique !
Pour cela, on peut utiliser par exemple la libraire fs pour lire un fichier html et le renvoyer.
Exemple:

let http = require('http');
let fs = require('fs');

 
http.createServer((req, res) => {
    res.writeHead(200, {
        'Content-Type': 'text/html'
    });
    fs.readFile('./template.html', null, function (error, data) {
        if (error) {
            res.writeHead(404);
            res.write('Impossible de lire le fichir :(');
        } else {
            res.write(data);
        }
        res.end();
    });
}).listen(8000);

Importante: Pensez à définir le content type comme il faut pour que le navigateur interprète le HTML !

Autres idées en vrac

  • Faire une api qui renvoi des données d’une base de donnée
  • Donnez les votre en commentaire !

Articles récents

Un serveur web basique en Node.JS

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut