Node.jsFondamentauxNode.js et serveur

Node.js et serveur HTTP (25 minutes)

Créer un serveur HTTP simple

Node.js permet de créer facilement des serveurs HTTP grâce à son module intégré http. Ce module permet de recevoir des requêtes et d’envoyer des réponses via le protocole HTTP, qui est à la base du fonctionnement des sites web.

Utiliser le module http pour créer un serveur

Le module http permet de définir un serveur capable de répondre aux requêtes des clients (navigateurs, outils comme Postman, etc.). Voici un exemple de serveur HTTP minimaliste avec Node.js :

const http = require('http');
 
const server = http.createServer((req, res) => {
  // Définir la réponse HTTP
  res.statusCode = 200; // Code de statut (200 = succès)
  res.setHeader('Content-Type', 'text/plain'); // Type de contenu de la réponse
  res.end('Hello, welcome to my Node.js server!\n'); // Message de réponse
});
 
// Le serveur écoute sur le port 3000
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

Ce serveur écoute sur le port 3000. Lorsque vous accédez à http://localhost:3000/ via un navigateur ou un client HTTP, le serveur répondra avec “Hello, welcome to my Node.js server!”.

Gestion des requêtes et réponses HTTP

Dans cet exemple, req représente la requête du client (c’est-à-dire les informations envoyées par le navigateur ou autre), et res représente la réponse que le serveur renverra. Chaque requête peut contenir des informations comme la méthode HTTP utilisée (GET, POST, etc.), l’URL, et les en-têtes.

Exemple avec des détails supplémentaires sur la requête et la réponse :

const server = http.createServer((req, res) => {
  console.log(`Received a ${req.method} request for: ${req.url}`);
 
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end(`Hello! You've requested ${req.url} using ${req.method}`);
});

Routage basique

Le routage consiste à définir des actions spécifiques en fonction de l’URL demandée. Cela permet de créer des pages et des services différents en fonction des besoins des utilisateurs.

Implémenter une gestion de routes basique avec Node.js

Vous pouvez utiliser la propriété req.url pour vérifier l’URL demandée par le client et exécuter différentes actions en fonction de cette URL. Voici un exemple simple de routage :

const server = http.createServer((req, res) => {
  if (req.url === '/') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Welcome to the homepage!\n');
  } else if (req.url === '/about') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('This is the about page.\n');
  } else {
    res.statusCode = 404;
    res.setHeader('Content-Type', 'text/plain');
    res.end('404 - Page not found\n');
  }
});
 
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

Dans cet exemple, lorsque vous accédez à http://localhost:3000/, le serveur renvoie un message d’accueil, et pour http://localhost:3000/about, il affiche une page “À propos”. Pour toute autre URL, il affiche une page 404 (page non trouvée).

Gérer différentes méthodes HTTP (GET, POST)

Node.js permet également de gérer différentes méthodes HTTP comme GET, POST, PUT, et DELETE. Voici un exemple qui différencie les méthodes GET et POST :

const server = http.createServer((req, res) => {
  if (req.url === '/' && req.method === 'GET') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Welcome to the GET homepage!\n');
  } else if (req.url === '/' && req.method === 'POST') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Welcome to the POST homepage!\n');
  } else {
    res.statusCode = 404;
    res.setHeader('Content-Type', 'text/plain');
    res.end('404 - Page not found\n');
  }
});
 
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

Dans cet exemple, le serveur répond différemment selon la méthode HTTP utilisée (GET ou POST). Cela permet d’implémenter des comportements variés selon les actions effectuées par l’utilisateur.

Exercice pratique

Créez un serveur HTTP qui gère deux routes simples :

  • La route / doit afficher un message de bienvenue.
  • La route /about doit afficher une page “À propos”.

Exemple de solution :

const http = require('http');
 
const server = http.createServer((req, res) => {
  if (req.url === '/') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Welcome to the homepage!\n');
  } else if (req.url === '/about') {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('This is the about page.\n');
  } else {
    res.statusCode = 404;
    res.setHeader('Content-Type', 'text/plain');
    res.end('404 - Page not found\n');
  }
});
 
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});