Zum Hauptinhalt springen

Fehlerbehandlung

Wenn die Validierung fehlschlägt, wirft bindingCargo einen CargoValidationError. Dieser Fehler kann mit setCargoErrorHandler oder der eingebauten Express-Fehlerbehandlungs-Middleware verarbeitet werden.


Fehlertypen

CargoValidationError

Wird ausgelöst, wenn ein oder mehrere Felder die Validierung nicht bestehen.

EigenschaftTypBeschreibung
namestringImmer 'CargoValidationError'
errorsCargoFieldError[]Liste der feldbezogenen Fehler

CargoFieldError

Repräsentiert einen einzelnen Feldvalidierungsfehler.

EigenschaftTypBeschreibung
namestringImmer 'CargoFieldError'
fieldstring | symbolDer Name des fehlgeschlagenen Feldes
messagestringDie Fehlermeldung

Option 1: setCargoErrorHandler (Empfohlen)

Einmalig beim App-Start registrieren. Alle Validierungsfehler aller Routen werden automatisch behandelt.

import { setCargoErrorHandler, CargoValidationError } from 'express-cargo'

setCargoErrorHandler((err, req, res, next) => {
res.status(400).json({
error: 'Validierung fehlgeschlagen',
details: err.errors.map(e => ({
field: e.field,
message: e.message,
})),
})
})

Beispielantwort:

{
"error": "Validierung fehlgeschlagen",
"details": [
{ "field": "email", "message": "email should be a valid email" },
{ "field": "age", "message": "age must be >= 0" }
]
}

Option 2: Express-Fehler-Middleware

Verwenden Sie die Standard-4-Argument-Fehler-Middleware von Express, um CargoValidationError abzufangen.

import { CargoValidationError } from 'express-cargo'
import { Request, Response, NextFunction } from 'express'

app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
if (err instanceof CargoValidationError) {
return res.status(400).json({
error: 'Validierung fehlgeschlagen',
details: err.errors.map(e => ({
field: e.field,
message: e.message,
})),
})
}
next(err)
})

Hinweis: Wenn setCargoErrorHandler registriert ist, hat es Vorrang. Die Express-Fehler-Middleware empfängt den Fehler nur, wenn next(err) innerhalb von setCargoErrorHandler aufgerufen wird.


Mehrere Fehler behandeln

Eine einzelne Anfrage kann mehrere Validierungen gleichzeitig fehlschlagen lassen. Alle Fehler werden gesammelt und zusammen zurückgegeben.

class CreateUserDto {
@Body()
@Email()
email!: string

@Body()
@Min(0)
age!: number
}

Wenn beide Felder ungültig sind, enthält err.errors zwei Einträge:

{
"error": "Validierung fehlgeschlagen",
"details": [
{ "field": "email", "message": "email should be a valid email" },
{ "field": "age", "message": "age must be >= 0" }
]
}