Gestion des Erreurs
Nous n'utilisons généralement pas de try/catch dans les contrôleurs. À la place, nous laissons les exceptions remonter jusqu'au Global Exception Handler.
Le Gestionnaire Global (app/Exceptions/Handler.ts)
Cette classe attrape toutes les erreurs non gérées et les formate en une réponse JSON standardisée :
{
"errors": [
{
"message": "Camera not found",
"code": "E_ROW_NOT_FOUND",
"status": 404
}
]
}
Exceptions Personnalisées
BusinessException
Utilisez ceci pour les erreurs logiques (ex: "Impossible de supprimer une caméra en cours d'enregistrement").
import BusinessException from "#exceptions/business_exception";
if (camera.isRecording) {
throw BusinessException.badRequest(
"Impossible de supprimer une caméra active",
);
}
Méthodes statiques disponibles :
.badRequest(message)-> 400.notFound(message)-> 404.forbidden(message)-> 403
Erreurs de Validation
Quand la validation VineJS échoue, elle lance automatiquement E_VALIDATION_ERROR (422), qui est attrapée par le handler et formatée en une liste d'erreurs par champ.