如何捕获Joi中失败验证的回调

时间:2015-04-08 12:45:37

标签: javascript node.js url-routing hapijs joi

我们正在使用Hapi构建Web服务。我们的路线有一些验证。我想知道在hapi回复客户端之前或之后是否有可能捕获或覆盖失败验证的默认回调。

我的(非工作)代码:

{
    method: 'GET',
    config: {
        tags: tags,
        validate: {
            params: {
                id: Joi.number()
                    .required()
                    .description('id of object you want to get'),
            },
            //Tried this, and it's not working:
            callback: function(err, value) {
                if (err) {
                    console.log('need to catch errors here!');
                }
            }
        }
    },
    path: '/model/{id?}',
    handler: function(request, reply) {
        reply('Ok');
    }
} 

2 个答案:

答案 0 :(得分:3)

您可以使用failAction属性添加回调:

validate: {
    params: {
        id: Joi.number()
            .required()
            .description('id of object you want to get'),
    },
    failAction: function (request, reply, source, error) {

        console.log(error);
    }
}

有关详细信息,请参阅documentation

  

failAction - 确定如何处理无效请求。允许的值为:

     
      
  • 'error' - 返回错误请求(400)错误响应。这是默认值。
  •   
  • 'log' - 记录错误,但继续处理请求。
  •   
  • 'ignore' - 不采取任何行动。
  •   
  • 自定义错误处理函数,其签名为'function(request,reply,source,error)`其中:

         
        
    • request - 请求对象。
    •   
    • reply - 继续回复界面。
    •   
    • source - 无效字段的来源(例如'path''query''payload')。
    •   
    • error - 为客户端响应准备的错误对象(包括error.data下的验证函数错误)。
    •   
  •   

答案 1 :(得分:0)

正如我在API中看到的,这可能是使用failAction完成的:

  

failAction - 定义响应验证失败时要执行的操作。   选项包括:

     
      
  • 错误 - 返回内部服务器错误(500)错误响应。这是默认值。
  •   
  • log - 记录错误但发送响应。
  •   
failAction: function( source, error, next) {
    // your code
}