2015-04-10 7 views
10

Wenn die config.validate option on a route verwenden und eine Anforderung fehlschlägt aufgrund Validierung, hapi wie einen Fehler zurückgibt:Wie kann ich die Validierungsfehlerantwort in hapi.js anpassen?

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "child \"weight\" fails because [\"weight\" is required]", 
    "validation": { 
     "source": "payload", 
     "keys": [ 
      "weight" 
     ] 
    } 
} 

Gibt es eine Möglichkeit, eine andere formatierte Validierungsfehler zu schicken?

+0

Könnten Sie das Objekt config.validate, das Sie in der Routenspezifikation verwenden, posten? – ZeMoon

Antwort

23

Es gibt zwei Möglichkeiten, um die Ausgabe anzupassen:

  1. Mit dem failAction Attribute in config.validate:

    config: { 
        validate: { 
         params: { 
          name: Joi.string().min(3).max(10) 
         }, 
         failAction: function (request, reply, source, error) { 
    
          error.output.payload.message = 'custom'; 
          return reply(error).code(400); 
         } 
        } 
    } 
    
  2. Mit dem onPreResponse Erweiterungspunkt:

    server.ext('onPreResponse', function (request, reply) { 
    
        var response = request.response; 
        if (response.isBoom && response.data.name === 'ValidationError') { 
         response.output.payload.message = 'custom'; 
        } 
    
        return reply.continue(); 
    }); 
    

Weitere Informationen finden Sie unter API documentation.

+1

Im ersten Beispiel musste ich den '.code (400) -Teil weglassen, weil, wenn man der Antwortfunktion das Fehlerobjekt zur Verfügung stellt, die Funktion' code() 'in dem von 'reply' zurückgegebenen Objekt nicht vorhanden ist() '. Der Antwortcode wird automatisch auf 400 gesetzt, indem das Fehlerobjekt in 'reply() 'übergeben wird. – pkout