Notre premier serveur web

Voir la vidéo
Description Sommaire

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'})
Publié
Technologies utilisées
Auteur :
Grafikart
Partager