2015-04-10 18 views
10

Khi sử dụng config.validate option on a route và một yêu cầu không do xác nhận, HAPI trả về một lỗi như:Làm cách nào để tùy chỉnh phản hồi lỗi xác thực trong hapi.js?

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

Có cách nào để gửi một xác nhận lỗi định dạng khác nhau?

+0

Bạn có thể đăng đối tượng config.validate mà bạn đang sử dụng trong thông số tuyến đường không? – ZeMoon

Trả lời

23

Có hai cách để tùy chỉnh đầu ra:

  1. Sử dụng thuộc tính failAction trong 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. Sử dụng điểm onPreResponse mở rộng:

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

Xem API documentation để biết thêm chi tiết.

+1

Trong ví dụ đầu tiên, tôi phải bỏ phần '.code (400) 'vì khi một cung cấp đối tượng lỗi cho hàm trả lời, hàm' code() 'không hiện diện trong đối tượng được trả về bởi' reply() '. Mã phản hồi được đặt thành 400 tự động bởi đối tượng lỗi được chuyển vào 'reply()'. – pkout

Các vấn đề liên quan