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).
Prérequis
Section intitulée « Prérequis »Express 5 demande Node.js 18 ou plus récent. Voir Node.js : installation et Node.js : gérer les versions.
node --versionnpm --versionCréer un projet
Section intitulée « Créer un projet »mkdir monapi && cd monapinpm init -ynpm install expressDans 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.
Premier serveur
Section intitulée « Premier serveur »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}`);});npm run devcurl 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).
Séparer l’application et le démarrage
Section intitulée « Séparer l’application et le démarrage »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}`));Structure conseillée
Section intitulée « Structure conseillée »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/.envConfiguration par l’environnement
Section intitulée « Configuration par l’environnement »export PORT=3000export NODE_ENV=productionnode src/serveur.jsAvec Node.js 20.6 ou plus, charger un fichier .env sans dépendance :
node --env-file=.env src/serveur.js.env :
PORT=3000NODE_ENV=developmentNe jamais versionner .env quand il contient des secrets.
Changements d’Express 4 à Express 5
Section intitulée « Changements d’Express 4 à Express 5 »Le guide officiel de migration (expressjs.com/en/guide/migrating-5.html) détaille tous les changements.
Dépannage
Section intitulée « Dépannage »| 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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation : expressjs.com
- Suite : Routes