如何在hapi回复上返回验证属性,就像Joi库那样

时间:2015-05-18 15:27:32

标签: hapijs joi

我在属性上有自己的自定义验证,并且我想返回400响应,该响应类似于在其他字段上返回的JOI.validation。这意味着除了错误和消息之外,我还希望返回验证属性 - 以便客户端可以知道要突出显示哪个字段。

所以,而不是这个

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "phone validation error: invalid phone number"
}

我想回复此

{
    "statusCode": 400,
     "error": "Bad Request",
     "message": "phone validation error: invalid phone number"
     "validation": {
     "source": "payload",
      "keys": [
            "phone"
      ]

}

如何在hapi回复中添加验证?

我一直这样做 - 这还没有发挥作用

        e.validation =
        {
            source: "payload",
            keys: [
                "phone"
            ]
        }
        reply(Boom.badRequest(e));

我还假设我不能为Joi设置自定义验证器,否则我会扩展Joi。但是,是否有一个Joi验证错误类型或对象我可以在回复中使用,以便在我的响应中获得像对象结构一样的Joi。

顺便说一下,我的手机验证不是一个简单的正则表达式,并且有特殊情况所以我不能使用Joi内置的正则表达式验证器。

2 个答案:

答案 0 :(得分:0)

试试这个:

var errObj = Boom.badRequest(e);
errObj.validation =
    {
        source: "payload",
        keys: [
            "phone"
        ]
    }
reply(errObj);

答案 1 :(得分:0)

如果你检查boom.badRequest('some message')返回的对象,你会得到:

{ data: null,
  isBoom: true,
  isServer: false,
  output:
   { statusCode: 400,
     payload:
      { statusCode: 400,
        error: 'Bad Request',
        message: 'some message' },
     headers: {} },
  reformat: [Function] }

所以你实际上需要做一些像

这样的事情
var errObj = Boom.badRequest(e);
errObj.output.payload.validation =
{
  source: "payload",
  keys: [
    "phone"
  ]
}
reply(errObj);