Notre premier serveur web
Dans ce chapitre, nous allons découvrir le module http qui va nous permettre de créer un serveur web (mais que l'on peut aussi utiliser pour générer des requêtes).
La méthode createServer permettra de créer un serveur web qui recevra des événements dont notamment l'évènement request qui sera reçu lorsque une requête sera reçue.
import { createServer } from 'node:http' const server = createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }) res.end(JSON.stringify({message: 'bonjour'})) }) server.listen(3000)
Interpréter la requête
Lors de l'événement request on recevra 2 objets représentant respectivement la requête et la réponse. Sur l'objet request on peut récupérer les en-têtes avec la propriété headers.
req.headers.accept req.headers.host req.headers['user-agent']
Pour récupérer les informations concernant l'URL, on pourra utiliser un objet URL.
const url = new URL(req.url, `http://${req.headers.host}`) url.pathname // récupère le chemin url.searchParams // Objet pour récupérer les query params (?id=...)
Enfin, l'objet request est un flux que l'on pourra lire comme un flux classique ou avec des méthodes du streamConsulers
import {json, text} from 'node:stream/consumers' const data = await json(req) // Pour du json const data = await text(req) // Pour du texte
Utiliser la réponse
L'objet réponse est un flux d'écriture dans lequel on pourra écrire les données à renvoyer au client. Il faudra s'assurer que le flux soit fermé à la fin de l'écriture.
import { createServer } from 'node:http' const server = createServer((req, res) => { res.end('Bonjour') }) server.listen(3000)
Vous pouvez aussi manipuler les en-têtes avec des méthodes dédiées et le status de la réponse.
res.setHeader('Accept', 'text/html') res.statusCode = 404 // writeHead permet de définir un code de status et les en têtes res.writeHead(404, {Accept: 'text/html'})
Il n'y a aucune réaction pour le moment.