如何像 Joi 库那样对 hapi 回复进行 return 验证 属性

how to return a validation property on a hapi reply like the way Joi library does it

我在 属性 上有自己的自定义验证,我想 return 类似于 JOI.validation 即 return 的 400 响应编辑在其他领域。这意味着除了错误和消息之外,我还想 return 验证 属性 - 这样客户端就可以知道要突出显示哪个字段。

所以,而不是这个

{
  "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。

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

试试这个:

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

如果您检查 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);