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ête 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 cient. Il faudra s'assurer que le flux soit fermée à 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