Exercice — Serveur Express + lecture de fichier (et Git)
Construisez un petit serveur Express qui lit un fichier via fs, puis versionnez le tout avec Git, en appliquant Node.js, NPM et les bonnes pratiques.
Objectif : créer un serveur Node.js avec Express qui expose une route
lisant un fichier via le module fs, puis versionner le projet avec Git.
Vous pratiquez Node.js côté serveur, NPM, le montage Express et .gitignore.
Le projet : un serveur qui lit un fichier
Créez un dossier mini-serveur. Un index.ts (Express, port 3000) avec une
route GET /readfile qui renvoie le contenu de data.txt. Ajoutez un
.gitignore (node_modules), puis faites 4 commits Git jalons.
Étapes pas à pas
1. Initialiser et installer
npm init -y puis npm install express. Ajoutez node_modules/ au
.gitignore.
2. Créer le serveur Express
import express from "express" puis const app = express().
Activez le parsing JSON :
import express from "express"
const app = express()
app.use(express.json())3. La route /readfile
Dans le handler, lisez data.txt avec fs.readFile (ou fs.readFileSync
pour un premier test simple) et renvoyez le contenu.
import express from "express"
import { readFile } from "node:fs/promises"
import { join, dirname } from "node:path"
import { fileURLToPath } from "node:url"
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const app = express()
app.get("/readfile", async (req, res) => {
try {
const data = await readFile(join(__dirname, "data.txt"), "utf8")
res.send(data)
} catch {
res.status(500).send("Erreur de lecture")
}
})4. Versionner avec Git
4 commits : (1) init + package.json, (2) serveur Express, (3) route /readfile, (4) .gitignore + data.txt.
Le projet complet
import express from "express"
import { readFile } from "node:fs/promises"
import { join, dirname } from "node:path"
import { fileURLToPath } from "node:url"
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const app = express()
const PORT = 3000
app.get("/readfile", async (req, res) => {
try {
const data = await readFile(join(__dirname, "data.txt"), "utf8")
res.send(data)
} catch {
res.status(500).send("Erreur de lecture")
}
})
app.listen(PORT, () => {
console.log(`Serveur sur http://localhost:${PORT}`)
})echo "Hello Node.js" > data.txt
npx tsx src/index.ts
# curl http://localhost:3000/readfile -> Hello Node.jsConseils
express()(avec les parenthèses) crée l'application ; ne faites pasrequire("express")seul.- Préférez le callback asynchrone de
fs.readFileen production ;readFileSyncbloque le thread (OK pour un test). - Testez le serveur avec
curlou le navigateur avant de commiter.
⚠️ Pièges à éviter
Versionner node_modules : ajoutez-le au .gitignore. Il se régénère
via npm install grâce au package-lock.json.
require("express") sans appel : avec ESM, importez Express :
import express from "express"
const app = express()L'appel express() est nécessaire pour instancier l'application.
Port déjà utilisé : si EADDRINUSE, changez le PORT ou libérez le
processus. Ne forcez pas 3000 si occupé.
Chemins relatifs de fs : ils sont relatifs au répertoire de
démarrage, pas au fichier source. Pour être robuste, construisez le chemin
avec path.join(__dirname, "data.txt").
Critères de réussite
- Serveur Express démarrant sur le port 3000.
- Route
/readfilerenvoyant le contenu dedata.txt. -
node_modulesignoré par Git. - 4 commits Git jalons propres.
Pour aller plus loin
Relisez Introduction à Node.js avant le quiz.
Node.js
Terminez le quiz du chapitre pour le marquer comme complété.
Atelier — Construire un serveur HTTP pas à pas
Partir d'un serveur minimal et l'améliorer progressivement : routes multiples, parsing de corps, fichiers statiques, gestion d'erreurs.
Synthèse — Node.js
Bilan du chapitre Node.js : event loop, modules, système de fichiers, écosystème npm et premier serveur HTTP natif.