Hapi不会从Boom错误返回数据属性

Ada*_*son 9 javascript hapijs

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

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

...我收到以下回复:

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

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

Ada*_*son 14

Hapi文档中,它引用了output.payloadboom对象上的属性,默认设置为include statusCode,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);
      }
}
Run Code Online (Sandbox Code Playgroud)

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


a d*_*ren 5

我有同样的问题,虽然我不能采用你采取的方法,但Boom 常见问题解答中有以下内容:

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

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

还:

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

文档:badImplementationnotImplemented