Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x | /**
* Middleware de gestion centralisée des erreurs Express.
*
* Principe : ne JAMAIS exposer de détails internes au client.
* Les erreurs SSH, DB, et internes sont loguées côté serveur
* mais le client reçoit un message générique.
*
* @module middleware/errorHandler
*/
/**
* Gestion centralisée des erreurs.
* Classifie l'erreur et retourne un message adapté sans fuite d'information.
*/
function errorHandler(err, req, res, _next) {
// Logger l'erreur complète côté serveur (pour le debug)
console.error('[error]', {
message: err.message,
stack: process.env.NODE_ENV === 'production' ? undefined : err.stack,
path: req.path,
method: req.method,
});
// ─── Erreurs de validation (envoyées volontairement par nos routes) ──────
Eif (err.type === 'validation') {
return res.status(400).json({ error: err.message });
}
// ─── Erreurs SSH — message générique pour ne pas exposer l'infra ────────
Eif (err.message && (err.message.includes('ssh') || err.message.includes('SSH'))) {
return res.status(502).json({
error: 'Erreur de connexion au serveur distant. Vérifiez la configuration SSH.',
});
}
// ─── Erreur de payload trop grand ────────────────────────────────────────
Eif (err.type === 'entity.too.large') {
return res.status(413).json({ error: 'Requête trop volumineuse.' });
}
// ─── Erreur JSON mal formé ──────────────────────────────────────────────
Eif (err.type === 'entity.parse.failed') {
return res.status(400).json({ error: 'JSON invalide dans le corps de la requête.' });
}
// ─── Erreur générique — JAMAIS exposer err.message en production ────────
const status = err.status || 500;
const message = status === 500
? 'Erreur interne du serveur.'
: (err.message || 'Erreur interne du serveur.');
res.status(status).json({ error: message });
}
module.exports = { errorHandler };
|