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"}

它缺少提供错误详细信息的数据对象!这是怎么回事?

4

3 回答 3

15

Hapi 文档中,它引用了景气对象的属性,output.payload默认设置为 includestatusCode和.errormessage

.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);
      }
}

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

于 2014-12-13T21:08:25.807 回答
5

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

问题如何在回复中包含额外信息?output.payload 缺少数据,什么给出?

回答响应负载中传回的值被完全锁定是有原因的。这主要是为了安全,并且不会将任何重要信息泄露给客户。这意味着您需要付出更多努力来包含有关您的自定义错误的额外信息。查看 hapi 文档中的“错误转换”部分。

还:

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

文档:badImplementation vs notImplemented

于 2016-01-25T18:17:53.537 回答
0

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

/**
 * 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-31T07:17:12.343 回答