Déployer une API Express
Une API Express sur l'hébergement d'applications suit les mêmes règles qu'un serveur Node.js classique : elle lit son port dans l'environnement, écoute sur toutes les interfaces et expose une route de santé. La différence se joue dans la structure des routes, la validation des entrées et la gestion des erreurs, qui évitent qu'une requête mal formée fasse tomber le processus.
Squelette minimal
const express = require('express');
const app = express();
app.use(express.json({ limit: '100kb' }));
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
app.get('/api/items', (req, res) => {
res.json([{ id: 1, name: 'exemple' }]);
});
app.post('/api/items', (req, res) => {
const { name } = req.body || {};
if (typeof name !== 'string' || name.length === 0) {
return res.status(400).json({ error: 'invalid_name' });
}
res.status(201).json({ id: 2, name });
});
app.use((req, res) => {
res.status(404).json({ error: 'not_found' });
});
app.use((err, req, res, next) => {
console.error(err);
const status = err.status || err.statusCode || 500;
res.status(status).json({ error: status === 500 ? 'internal_error' : 'bad_request' });
});
const port = Number(process.env.PORT || 3000);
app.listen(port, '0.0.0.0', () => console.log(`api sur ${port}`));express.json limite la taille du corps : sans limite, une requête volumineuse peut saturer la mémoire. La route 404 arrive après toutes les routes, et le gestionnaire d'erreurs à quatre arguments arrive en dernier. Un gestionnaire à trois arguments ne sera pas reconnu comme gestionnaire d'erreurs.
Routes et validation
Une API publique reçoit des données non fiables. Validez le type, la longueur et les valeurs autorisées avant d'atteindre la base. Un schéma explicite (Zod, Joi ou une fonction maison) renvoie un 400 clair au lieu d'une exception 500.
- Utilisez des paramètres de requête préparés, jamais une concaténation SQL.
- Limitez les champs acceptés : ne laissez pas le client choisir un
roleou unowner_id. - Renvoyez des messages d'erreur sans détail interne.
- Pour les routes coûteuses, ajoutez une limitation de débit ciblée.
Variables et configuration
DATABASE_URL=...
API_KEY=...Ces valeurs se placent dans les variables du panneau. Validez-les au démarrage et échouez avec un message explicite si une variable obligatoire manque. Ne renvoyez jamais process.env dans une réponse, même en débogage.
Robustesse
Un serveur doit survivre à une erreur de route : capturez les rejets de promesses, sinon un async non géré peut terminer le processus selon la version de Node. Fermez proprement sur SIGTERM : arrêtez d'accepter des connexions, terminez les requêtes en cours, fermez la base, puis quittez. La plateforme peut redémarrer un service lors d'une maintenance.
Vérifier
curl -i http://ADRESSE_FOURNIE:PORT/health
curl -i -X POST http://ADRESSE_FOURNIE:PORT/api/items \
-H 'Content-Type: application/json' \
-d '{"name":"test"}'Attendez 200 sur /health, 404 sur une route inconnue, 400 sur un JSON invalide, et aucune trace de pile dans la réponse. Si le service tourne mais que les requêtes échouent, vérifiez l'interface d'écoute avant les routes.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Héberger un bot Discord Node.jsConnecter un bot discord.js avec un jeton en variable, des intents minimaux et des caches bornés.
- Connecter une base de données à Node.jsConfigurer un pool MySQL ou PostgreSQL depuis les variables du panneau et gérer migrations et sauvegardes.
- Redéployer une application Node.jsRemplacer le code, réinstaller les dépendances, redémarrer et vérifier sans état mixte.