Aller au contenu

Express : installation et premier serveur

Express est le framework web minimaliste de référence pour Node.js : routes, middlewares, API JSON, fichiers statiques. Cette rubrique décrit Express 5, la version courante. Les exemples utilisent des noms génériques (monapi, port 3000).

Express 5 demande Node.js 18 ou plus récent. Voir Node.js : installation et Node.js : gérer les versions.

Fenêtre de terminal
node --version
npm --version
Fenêtre de terminal
mkdir monapi && cd monapi
npm init -y
npm install express

Dans package.json, activer les modules ES (import) et ajouter les scripts :

{
"name": "monapi",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node src/serveur.js",
"dev": "node --watch src/serveur.js"
}
}

node --watch redémarre le serveur à chaque modification de fichier : aucun outil supplémentaire n’est nécessaire en développement.

src/serveur.js :

import express from 'express';
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Bonjour depuis Express');
});
app.get('/sante', (req, res) => {
res.json({ statut: 'ok' });
});
app.listen(port, '127.0.0.1', () => {
console.log(`Serveur en écoute sur http://127.0.0.1:${port}`);
});
Fenêtre de terminal
npm run dev
curl http://127.0.0.1:3000/
curl http://127.0.0.1:3000/sante

Écouter sur 127.0.0.1 rend le serveur inaccessible de l’extérieur : un reverse proxy local le publie (voir Sécurité et production).

Pour faciliter les tests, exporter l’application sans l’écouter :

src/app.js :

import express from 'express';
export const app = express();
app.get('/sante', (req, res) => res.json({ statut: 'ok' }));

src/serveur.js :

import { app } from './app.js';
const port = Number(process.env.PORT) || 3000;
app.listen(port, '127.0.0.1', () => console.log(`Écoute sur ${port}`));
monapi/
├── package.json
├── src/
│ ├── app.js
│ ├── serveur.js
│ ├── routes/
│ │ └── clients.js
│ ├── middlewares/
│ │ └── erreurs.js
│ └── services/
├── public/ # fichiers statiques
├── views/ # modèles de pages (optionnel)
└── .env # non versionné

.gitignore :

node_modules/
.env
Fenêtre de terminal
export PORT=3000
export NODE_ENV=production
node src/serveur.js

Avec Node.js 20.6 ou plus, charger un fichier .env sans dépendance :

Fenêtre de terminal
node --env-file=.env src/serveur.js

.env :

PORT=3000
NODE_ENV=development

Ne jamais versionner .env quand il contient des secrets.

Le guide officiel de migration (expressjs.com/en/guide/migrating-5.html) détaille tous les changements.

Symptôme Piste
Cannot use import statement outside a module Ajouter "type": "module" dans package.json, ou utiliser require
Error [ERR_MODULE_NOT_FOUND] En ES modules, l’extension est obligatoire dans les imports relatifs (./app.js)
listen EADDRINUSE: address already in use Port occupé : sudo ss -tlnp | grep 3000
Cannot GET /chemin Route inexistante ou mauvaise méthode HTTP
Le navigateur n’atteint pas le serveur Écoute sur 127.0.0.1 : normal depuis une autre machine
TypeError: Missing parameter name au démarrage Chemin au format Express 4 (*, /:id?) dans Express 5

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Express fonctionne de la même façon sur les deux versions ; seule compte la version de Node.js installée. Le paquet d’Ubuntu (node-express) n’est pas utilisé : installer Express avec npm dans le projet.