【问题标题】:how to return a validation property on a hapi reply like the way Joi library does it如何像 Joi 库那样在 hapi 回复中返回验证属性
【发布时间】:2015-07-30 04:38:27
【问题描述】:

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

【问题讨论】:

    标签: hapijs joi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 这不起作用 - 如果我手动填充,hapi 似乎会在结果中跳出验证属性
      • 或许你应该在 GitHub 上提出问题。
      猜你喜欢
      • 2018-09-24
      • 2015-04-29
      • 2013-10-19
      • 2015-10-17
      • 2019-10-10
      • 2020-05-30
      • 2018-05-25
      • 2018-07-25
      • 2020-01-17
      相关资源
      最近更新 更多