【问题标题】:Hapi does not return data attribute from Boom errorHapi 不从 Boom 错误返回数据属性
【发布时间】:2015-02-12 07:49:10
【问题描述】:

当从我的 Hapi 路由回复 Boom 错误时...

{
      method: 'PUT',
      path:'foo',
      handler: function (request, reply) {
        reply(Boom.badRequest('something', { stuff: 'and more' }));
      }
}

...我得到以下响应:

{"statusCode":400,"error":"Bad Request","message":"something"}

缺少提供错误详细信息的数据对象!有什么关系?

【问题讨论】:

  • hapi 的哪个版本?
  • 7.2.0.用我发现的内容发布“答案”。

标签: javascript hapijs


【解决方案1】:

Hapi documentation 上,它引用景气对象上的output.payload 属性,默认设置为包括statusCodeerrormessage

我可以通过在该对象上设置.details 来输出吊杆错误的详细信息:

{
      method: 'PUT',
      path:'foo',
      handler: function (request, reply) {
        var err = Boom.badRequest('something', { stuff: 'and more' });
        err.output.payload.details = err.data;
        reply(err);
      }
}

不是世界上最理想的东西,但可能是安全的默认值。

【讨论】:

  • 看起来你应该这样做。
【解决方案2】:

我也有同样的问题,虽然我不能采取你采取的方法,但Boom FAQ中有以下内容:

问题如何在回复中包含额外信息?输出.有效载荷 缺少数据,什么给出?

Answer 在响应负载中传回的值是有原因的 非常锁定。主要是为了安全,不泄露任何东西 重要信息返回给客户。这意味着您将需要 付出更多努力来包含有关您的额外信息 自定义错误。查看 hapi 中的 "Error transformation" 部分 文档。

还有:

我发现(奇怪地),正如文档所示(但不是示例用法),将消息传递给 badImplementation 会被忽略,而将消息传递给 notImplemented - 两者都是 5xx 错误。

文档:badImplementation vs notImplemented

【讨论】:

    【解决方案3】:

    传递额外的参数是通过数据对象完成的,但是,如代码中所述

    /**
     * Custom error data with additional information specific to the error type
     */
    data?: Data;
    

    它只是特定错误类型的特定信息

    如果您完全坚持添加额外参数,我找到了解决方法

    const err = Boom.badData('this is bad data message')
    err.output.payload = { ...err.output.payload, attributes: { a: 'bb', c: 'ddd' } }
    return err
    

    这将产生以下负载:

    {
      "statusCode": 422,
      "error": "Unprocessable Entity",
      "message": "this is bad data message",
      "attributes": {
        "a": "bb",
        "c": "ddd"
      }
    }
    

    您可以编写自己的函数来包装这段代码并使用它

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2017-03-13
      • 2013-03-18
      相关资源
      最近更新 更多