1

我对属性有自己的自定义验证,我想返回一个 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 内置的正则表达式验证器。

4

2 回答 2

0

尝试这个:

var errObj = Boom.badRequest(e);
errObj.validation =
    {
        source: "payload",
        keys: [
            "phone"
        ]
    }
reply(errObj);
于 2015-05-19T09:48:38.093 回答
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);
于 2015-06-08T15:03:57.757 回答