Module http 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
// 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
require('http')- Importer le module http de Node.jshttp.createServer()- Créer une instance de serveur HTTP- Fonction de rappel
(req, res) => {...}- Gérer chaque requête HTTPreq- Objet de requête, contient les informations de requête envoyées par le clientres- Objet de réponse, utilisé pour envoyer des réponses au client
res.writeHead()- Définir les en-têtes de réponseres.end()- Terminer la réponse et envoyer les donnéesserver.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 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êtereq.headers: Objet des en-têtes de requêtereq.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éponseres.write(data): Écrire le corps de la réponseres.end([data]): Terminer la réponse, envoyer éventuellement les données finalesres.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
// 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
// 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 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 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
- Gestion des erreurs: Toujours gérer les événements d'erreur dans les requêtes et les réponses
- Considérations de performance: Pour les applications à forte concurrence, envisager d'utiliser des pools de connexions
- 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
- Utiliser des flux: Pour les transferts de fichiers volumineux, utiliser la diffusion en continu
- 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.
Modules intégrés de Node.js