2015-04-10 14 views
10

Quando si utilizza il config.validate option on a route e una richiesta fallisce a causa di convalida, Hapi restituisce un errore del tipo:Come posso personalizzare la risposta all'errore di convalida in hapi.js?

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

C'è un modo per inviare un diverso errore di convalida formattato?

+0

Potrebbe pubblicare l'oggetto config.validate che si sta utilizzando nella specifica del percorso? – ZeMoon

risposta

23

Ci sono due modi per personalizzare l'output:

  1. Utilizzando l'attributo failAction 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. utilizzando il punto onPreResponse estensione:

    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(); 
    }); 
    

Vedere il API documentation per ulteriori dettagli.

+1

Nel primo esempio, ho dovuto omettere la parte '.code (400)' perché quando si fornisce l'oggetto error alla funzione reply, la funzione 'code()' non è presente nell'oggetto restituito da 'reply() '. Il codice di risposta è impostato automaticamente su 400 dall'oggetto errore passato in 'reply()'. – pkout

Problemi correlati