logo oujood
🔍

Node.js : Guide Complet sur le Module HTTP


OUJOOD.COM

Introduction : Le module HTTP intégré

Node.js est une plateforme puissante pour développer des applications web modernes. L'un de ses atouts majeurs est son module HTTP intégré, qui permet de créer facilement des serveurs web, gérer des requêtes et réponses, et manipuler les en-têtes et chaînes de requête.

Dans cet article, nous allons explorer en détail comment utiliser le module HTTP pour créer un serveur web, gérer des données clients et répondre efficacement. Ce tutoriel est conçu pour les débutants et les développeurs souhaitant approfondir leurs connaissances.

Créer un serveur Web avec le module HTTP

La première étape pour utiliser le module HTTP est de créer un serveur. Voici un exemple simple de serveur qui répond avec "Bonjour le Monde!".

📋 Copier le code


const http = require('http');

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

server.listen(3000, () => {
    console.log('Serveur démarré sur le port 3000');
});

Explication du Code Node.js

Voici une explication claire et concise du code en question :

Ce code crée un serveur HTTP simple en utilisant Node.js. Voici les détails de chaque partie :

1. Importation du module HTTP

const http = require('http');

Cette ligne importe le module HTTP, qui permet de créer un serveur web.

2. Création du serveur

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

- http.createServer(...) : Cette fonction crée un serveur qui répond aux requêtes HTTP.
- (req, res) => { ... } : C'est une fonction de rappel qui prend deux arguments : req (la requête) et res (la réponse).
- res.statusCode = 200; : Définit le code de statut HTTP à 200, ce qui signifie "OK".
- res.setHeader('Content-Type', 'text/plain'); : Définit l'en-tête de la réponse pour indiquer que le type de contenu est du texte brut.
- res.end('Bonjour le Monde!'); : Envoie la réponse "Bonjour le Monde!" et termine la requête.

3. Lancement du serveur

server.listen(3000, () => {  
    console.log('Serveur démarré sur le port 3000');  
});

- server.listen(3000, ...) : Fait écouter le serveur sur le port 3000.
- La fonction de rappel affiche un message dans la console lorsqu'il démarre avec succès.

Résumé

En résumé, ce code met en place un serveur qui écoute sur le port 3000 et renvoie "Bonjour le Monde!" comme réponse à chaque requête HTTP.

Ajouter un en-tête HTTP

Les en-têtes HTTP sont essentiels pour fournir des métadonnées sur les réponses. Ajoutons un en-tête personnalisé pour indiquer la version de notre application.

📋 Copier le code


const http = require('http');

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.setHeader('X-App-Version', '1.0.0');
    res.end('Bonjour le Monde! avec un en-tête personnalisé!');
});

server.listen(3000, () => {
    console.log('Serveur avec en-tête personnalisé démarré sur le port 3000');
});

Explication du Code JavaScript

Ce code crée un serveur HTTP simple en utilisant le module http de Node.js. Voici une décomposition des principales parties :

1. Importation du module http

const http = require('http');

Cela permet d'utiliser le module http qui fournit des fonctionnalités pour créer des serveurs et des clients HTTP.

2. Création du serveur

const server = http.createServer((req, res) => {

Ici, un serveur est créé en utilisant http.createServer(). Cette fonction prend une fonction de rappel (callback) qui est exécutée à chaque fois qu'une requête HTTP est reçue. Les paramètres req et res représentent respectivement la requête et la réponse.

3. Configuration de la réponse

res.statusCode = 200;  
res.setHeader('Content-Type', 'text/plain');  
res.setHeader('X-App-Version', '1.0.0');  
res.end('Bonjour le Monde! avec un en-tête personnalisé!');
  • res.statusCode = 200; : Définit le code de statut HTTP à 200, indiquant que la requête a réussi.
  • res.setHeader('Content-Type', 'text/plain'); : Définit le type de contenu de la réponse à text/plain, ce qui signifie que le contenu est du texte brut.
  • res.setHeader('X-App-Version', '1.0.0'); : Ajoute un en-tête personnalisé X-App-Version pour indiquer la version de l'application.
  • res.end('Bonjour le Monde! avec un en-tête personnalisé!'); : Termine la réponse et envoie le message "Bonjour le Monde! avec un en-tête personnalisé!" au client.

4. Lancement du serveur

server.listen(3000, () => {  
    console.log('Serveur avec en-tête personnalisé démarré sur le port 3000');  
});

Cette partie démarre le serveur et écoute les requêtes entrantes sur le port 3000. Une fois le serveur démarré, il affiche un message dans la console pour indiquer que le serveur est opérationnel.

Résumé

En résumé, ce code met en place un serveur HTTP qui renvoie un message spécifique avec un en-tête personnalisé chaque fois qu'une requête est reçue.

Lire la chaîne de requête

Les chaînes de requête contiennent des paramètres que les clients peuvent envoyer au serveur. Utilisons url pour analyser la chaîne de requête.

📋 Copier le code


const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
    const queryObject = url.parse(req.url, true).query;
    console.log(queryObject);

    res.statusCode = 200;
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify(queryObject));
});

server.listen(3000, () => {
    console.log('Serveur prêt à analyser les chaînes de requête sur le port 3000');
});

Explication du Code Node.js

Ce code crée un serveur HTTP en utilisant Node.js qui écoute les demandes sur le port 3000. Voici les principales étapes :

1. Importation des modules

  • http : Permet de créer un serveur HTTP.
  • url : Utilisé pour analyser les URL.

2. Création du serveur

http.createServer((req, res) => { ... }) : Crée un serveur qui traite les requêtes (req) et les réponses (res).

À l'intérieur du serveur, url.parse(req.url, true).query analyse l'URL de la requête pour en extraire les paramètres de requête (query parameters) sous forme d'objet.

3. Affichage des paramètres de requête

console.log(queryObject) : Affiche les paramètres de requête dans la console.

4. Réponse au client

  • res.statusCode = 200 : Définit le code de statut HTTP à 200 (OK).
  • res.setHeader('Content-Type', 'application/json') : Spécifie que le type de contenu de la réponse est JSON.
  • res.end(JSON.stringify(queryObject)) : Envoie les paramètres de requête sous forme de chaîne JSON au client.

5. Écoute du serveur

server.listen(3000, () => { ... }) : Démarre le serveur sur le port 3000 et affiche un message indiquant qu'il est prêt à recevoir des requêtes.

Résumé

Ce serveur affiche et renvoie les paramètres de requête en format JSON lorsqu'il reçoit une demande.

Fractionner la chaîne de requête

Une fois la chaîne de requête extraite, vous pouvez accéder à des paramètres spécifiques. Voici un exemple :

📋 Copier le code


const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
    const queryObject = url.parse(req.url, true).query;

    if (queryObject.name && queryObject.age) {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end(`Bonjour ${queryObject.name}, vous avez ${queryObject.age} ans.`);
    } else {
        res.statusCode = 400;
        res.end('Veuillez fournir les paramètres "name" et "age".');
    }
});

server.listen(3000, () => {
    console.log('Serveur prêt à fractionner les chaînes de requête sur le port 3000');
});

Explication du Code

1. Importation des modules :
const http = require('http');
const url = require('url');

Ces lignes importent les modules http et url qui permettent de créer un serveur et de gérer les URL.
2. Création du serveur :
const server = http.createServer((req, res) => {

Ici, un serveur HTTP est créé. Il utilise une fonction de rappel (callback) qui sera exécutée chaque fois qu'une requête est reçue.
3. Analyse de la requête :
const queryObject = url.parse(req.url, true).query;

Cette ligne analyse l'URL de la requête entrante et extrait les paramètres de requête sous forme d'objet. Par exemple, pour une URL comme /?name=Jean&age=30, queryObject contiendra { name: 'Jean', age: '30' }.
4. Gestion des paramètres :
if (queryObject.name && queryObject.age) {

Le code vérifie si les paramètres name et age sont présents dans queryObject.

- Si les paramètres sont présents :
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end(`Bonjour ${queryObject.name}, vous avez ${queryObject.age} ans.`);

Le serveur répond avec un code de statut 200 (succès), définit le type de contenu à text/plain, et envoie un message de bienvenue incluant le nom et l'âge de l'utilisateur.

- Si les paramètres sont absents :
res.statusCode = 400;
res.end('Veuillez fournir les paramètres "name" et "age".');

Le serveur répond avec un code de statut 400 (bad request) et demande à l'utilisateur de fournir les paramètres requis.
5. Écoute sur le port 3000 :
server.listen(3000, () => {
console.log('Serveur prêt à fractionner les chaînes de requête sur le port 3000');
});

Le serveur commence à écouter les requêtes sur le port 3000 et affiche un message dans la console pour indiquer qu'il est prêt.

En résumé, ce serveur écoute les requêtes HTTP sur le port 3000, extrait les paramètres name et age d'une URL, et renvoie un message personnalisé si ces paramètres sont fournis, sinon il renvoie une erreur.

Méthodes de l'objet res dans Node.js

1. res.write()

Description : Cette méthode est utilisée pour envoyer des données (par exemple, du contenu HTML, JSON, etc.) au client avant de finaliser la réponse.

res.write('Hello, world!');
	

2. res.end()

Description : Cette méthode termine la réponse HTTP. Elle doit être appelée pour signaler au serveur que la réponse est complète et que le client peut maintenant recevoir le contenu.

res.end();
	

3. res.setHeader()

Description : Cette méthode permet de définir un en-tête HTTP supplémentaire avant de commencer à envoyer la réponse.

res.setHeader('Content-Type', 'application/json');
	

4. res.statusCode

Description : Cette propriété permet de définir le code de statut HTTP de la réponse. C'est une alternative à res.writeHead().

res.statusCode = 404; // Définir le code de statut à "Not Found"
	

5. res.redirect()

Description : Cette méthode est utilisée pour rediriger le client vers une autre URL. Elle envoie un code de statut HTTP 302 (par défaut) avec un en-tête Location.

res.redirect('https://www.example.com');
	

Résumé

res.writeHead() est une méthode importante pour définir les en-têtes et le statut de la réponse HTTP, mais elle n'est pas la seule. Selon le contexte (module HTTP natif ou Express), différentes méthodes peuvent être utilisées pour répondre aux besoins du serveur.