Module http de Node.js

Java FileModules intégrés de Node.js


de Node.jshttpLe module est l'un des modules intégrés principaux de Node.js. Il permet aux développeurs de créer des serveurs et des clients HTTP. Grâce à ce module, nous pouvons facilement gérer les requêtes et les réponses HTTP, et construire des applications web ou des services API.

httpLe module fournit la capacité de créer des serveurs et d'effectuer des requêtes HTTP, et constitue la base pour construire des applications web. Il prend en charge le protocole HTTP/1.1 et fournit une API riche pour gérer diverses opérations liées à HTTP.


Créer un serveur HTTP

UtiliserhttpLe module rend très simple la création d'un serveur. Voici un exemple de base :

Exemple

const http = require('http');

// Créer un serveur HTTP
const server = http.createServer((req, res) => {
  // Définir les en-têtes de réponse
  res.writeHead(200, {'Content-Type': 'text/plain'});
 
  // Envoyer les données de réponse
  res.end('Hello, World!\n');
});

// Écouter sur le port 3000
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

Explication de code

  1. require('http')- Importer le module http de Node.js
  2. http.createServer()- Créer une instance de serveur HTTP
  3. Fonction de rappel(req, res) => {...}- Gérer chaque requête HTTP
    • req- Objet de requête, contient les informations de requête envoyées par le client
    • res- Objet de réponse, utilisé pour envoyer des réponses au client
  4. res.writeHead()- Définir les en-têtes de réponse
  5. res.end()- Terminer la réponse et envoyer les données
  6. server.listen()- Démarrer le serveur et écouter sur le port spécifié

Gestion des requêtes HTTP

Un serveur HTTP doit pouvoir gérer différents types de requêtes. Voyons comment analyser les informations de requête :

Exemple

const http = require('http');

const server = http.createServer((req, res) => {
  // Obtenir la méthode de requête, l'URL et les en-têtes de requête
  const { method, url, headers } = req;
 
  // Journaliser les informations de requête
  console.log(`Reçu ${method}requête, chemin: ${url}`);
  console.log('En-têtes de la requête :', headers);
 
  // Gérer selon la méthode de la requête
  if (method === 'GET') {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Ceci est une requête GET\n');
  } else if (method === 'POST') {
    let body = '';
   
    // Collecter les données POST
    req.on('data', chunk => {
      body += chunk;
    });
   
    // Réception des données terminée
    req.on('end', () => {
      console.log('Données POST :', body);
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Données reçues\n');
    });
  } else {
    res.writeHead(405, {'Content-Type': 'text/plain'});
    res.end('Méthode non autorisée\n');
  }
});

server.listen(3000);

Propriétés courantes de l'objet Request (req)

  • req.method: méthode de requête HTTP (GET, POST, PUT, DELETE, etc.)
  • req.url: Le chemin URL de la requête
  • req.headers: Objet des en-têtes de requête
  • req.httpVersion: version du protocole HTTP

Méthodes courantes de l'objet Response (res)

  • res.writeHead(statusCode, headers): Définir le code d'état et les en-têtes de la réponse
  • res.write(data): Écrire le corps de la réponse
  • res.end([data]): Terminer la réponse, envoyer éventuellement les données finales
  • res.setHeader(name, value): Définir les en-têtes de réponse

Effectuer des requêtes HTTP

httpCe module peut non seulement créer des serveurs, mais aussi agir comme client pour effectuer des requêtes HTTP :

Exemple

const http = require('http');

// Effectuer une requête GET
http.get('http://jsonplaceholder.typicode.com/posts/1', (res) => {
  let data = '';
 
  // Recevoir les données
  res.on('data', (chunk) => {
    data += chunk;
  });
 
  // Réception des données terminée
  res.on('end', () => {
    console.log('Données de réponse :', JSON.parse(data));
  });
}).on('error', (err) => {
  console.error('Erreur de requête :', err);
});

Effectuer une requête POST

Exemple

const http = require('http');

// Options de la requête
const options = {
  hostname: 'jsonplaceholder.typicode.com',
  port: 80,
  path: '/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  }
};

// Créer une requête
const req = http.request(options, (res) => {
  let data = '';
 
  res.on('data', (chunk) => {
    data += chunk;
  });
 
  res.on('end', () => {
    console.log('Réponse :', JSON.parse(data));
  });
});

// Gérer les erreurs
req.on('error', (err) => {
  console.error('Erreur de requête :', err);
});

// Écrire les données de la requête
const postData = JSON.stringify({
  title: 'foo',
  body: 'bar',
  userId: 1
});

req.write(postData);
req.end();

Scénarios d'application pratiques

1. Création d'une API RESTful

Exemple

const http = require('http');

const server = http.createServer((req, res) => {
  const { method, url } = req;
 
  // Gestion simple des routes
  if (method === 'GET' && url === '/api/users') {
    res.writeHead(200, {'Content-Type': 'application/json'});
    res.end(JSON.stringify([{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]));
  } else if (method === 'POST' && url === '/api/users') {
    let body = '';
    req.on('data', chunk => body += chunk);
    req.on('end', () => {
      const newUser = JSON.parse(body);
      // Les données peuvent être enregistrées dans la base de données ici
      res.writeHead(201, {'Content-Type': 'application/json'});
      res.end(JSON.stringify({id: Date.now(), ...newUser}));
    });
  } else {
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end('Non trouvé'\n');
  }
});

server.listen(3000);

2. Serveur proxy

Exemple

const http = require('http');

const proxy = http.createServer((clientReq, clientRes) => {
  // Faire une requête au serveur cible
  const options = {
    hostname: 'example.com',
    port: 80,
    path: clientReq.url,
    method: clientReq.method,
    headers: clientReq.headers
  };
 
  const proxyReq = http.request(options, (proxyRes) => {
    // Transférer la réponse du serveur cible au client
    clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
    proxyRes.pipe(clientRes);
  });
 
  // Transférer le corps de la requête client
  clientReq.pipe(proxyReq);
});

proxy.listen(8080);

Bonnes pratiques

  1. Gestion des erreurs: Toujours gérer les événements d'erreur dans les requêtes et les réponses
  2. Considérations de performance: Pour les applications à forte concurrence, envisager d'utiliser des pools de connexions
  3. Sécurité:
    • Valider toutes les entrées
    • Définir des en-têtes de sécurité appropriés
    • Limiter la taille du corps de la requête pour prévenir les attaques DoS
  4. Utiliser des flux: Pour les transferts de fichiers volumineux, utiliser la diffusion en continu
  5. Envisager des frameworks: Pour les applications complexes, envisager d'utiliser des frameworks tels qu'Express et Koa

Résumé

de Node.jshttpLe module fournit la capacité de base pour créer des applications réseau. Bien qu'il existe aujourd'hui de nombreux frameworks plus avancés, comprendrehttples principes de fonctionnement du module est crucial pour tout développeur Node.js. En maîtrisant ce module principal, vous pourrez mieux comprendre le fonctionnement des applications web et être capable de créer des solutions personnalisées selon vos besoins.

Java FileModules intégrés de Node.js

Autres extensions