Apprendre Node.js : Créer un Serveur

Node.js permet de construire un serveur web via le module http.

Icône de calendrier
Intermédiaire
7 chapitres

Construction du serveur

Pour créer un serveur Node, la première chose à faire est de créer un fichier nommé 📄 server.js (on pourrait l’appeler autrement comme 📄 app.js ou encore 📄 index.js).

Module HTTP

On importe à l’intérieur le module http, natif à Node.

server.js
copié !
const http = require('http');

Création de la réponse

Le module http chargé préalablement au sein de la constante http nous permet d’appeler la méthode createServer().

server.js
copié !
const server = http.createServer((req, res) => {
	res.statusCode = 200;
	res.setHeader('Content-Type', 'text/plain');
	res.end('Hello World');
});

La méthode createServer() prend une fonction de rappel en argument. Cette fonction de rappel sera appelée à chaque fois qu’une requête HTTP sera reçue par le serveur. On l’appelle requestListener.

Cette fonction de callback reçoit 2 objets en tant qu’arguments :

  • req (request) : contenant des informations sur la requête HTTP (méthode, entête…).
  • res (response) : utilisé pour construire la réponse à retourner au client (template, json…)

Dans cet exemple, on utilise la propriété statusCode pour définir le code de réponse HTTP 200, la méthode setHeader() pour spécifier l’entête (ici, on renvoie du texte) et la méthode end() pour renvoyer la réponse.

Nous aurions aussi bien pu retourner du HTML en adaptant le type de l’entête et le contenu de la manière suivante :

copié !
res.setHeader('Content-Type', 'text/html');
res.end('<h1>Hello World</h1>');

Ecoute du serveur

On configure le serveur pour qu’il écoute sur le port 3000 du localhost (127.0.0.1).

server.js
copié !
server.listen(3000, '127.0.0.1', () => {
	console.log(`Serveur démarré sur http://127.0.0.1:3000`);
});

On prendra généralement l’habitude de stocker l’adresse du serveur et le port d’écoute via des constantes :

server.js
copié !
const hostname = '127.0.0.1';
const port = 3000;

server.listen(port, hostname, () => {
	console.log(`Serveur démarré sur http://${hostname}:${port}`);
});

Notez qu’il est possible d’écouter sur tout autre port libre de votre machine.

Voici le code définitif de notre serveur local 📄 server.js.

server.js
copié !
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
	res.setHeader('Content-Type', 'text/plain');
	res.end('Hello World');
});

server.listen(port, hostname, () => {
	console.log(`Serveur démarré sur http://${hostname}:${port}`);
});

Démarrage du serveur

On distingue deux manières de démarrer notre serveur.

Avec la commande node

Démarrer le serveur via la commande node.

copié !
node server

Sous Node.js, vous devez redémarrer le processus (CTRL+C et retaper node server) à chaque modification de votre code afin que les changements prennent effet lors de l’actualisation de la page.

Cette étape supplémentaire qui s’ajoute à votre flux de travail pour que les modifications soient implémentées est contraignante pour le développement et le débogage. Par chance, il existe Nodemon.

Avec l’outil Nodemon

Nodemon est un outil de développement pour Node.js qui permet de surveiller les modifications sur un fichier spécifique et de redémarrer automatiquement le serveur Node lorsqu’il est modifié.

Installons-le avec la ligne de commande suivante :

copié !
npm install nodemon -g

Désormais, au lieu d’utiliser node server pour démarrer votre serveur, vous pouvez utiliser nodemon server.

Accéder au site

En se rendant à l’adresse http://localhost:3000/, on voit s’afficher le texte Hello World.

En réalité, notre serveur Node est à l’heure actuelle très simpliste, et il répondra à toutes les requêtes basées sur cette adresse.

Ainsi, l’adresse http://localhost:3000/test sera aussi interceptée par le serveur et retournera Hello World.