【问题标题】:How to set custom error in strong-error-handler when debug mode is false调试模式为假时如何在强错误处理程序中设置自定义错误
【发布时间】:2018-08-01 15:37:03
【问题描述】:

我正在使用 Loopback v3.x 和 strong-error-handler 来处理我的项目错误。错误响应在开发模式下很好,但在生产模式下,它会向客户端抛出不同的错误。

我意识到是 "debug": false" 让它抛出了一个 { error: { statusCode: 500, message: 'Internal Server Error' } }(基于关于 strong-error-handler 的 Loopback 文档)

但是当我将new Error('Error Messages')"debug": false 一起抛出时,我想在生产中显示我的错误(以防止文件路径、URL 和堆栈跟踪等敏感数据暴露)

以下是我的配置文件:

config.json

{
  ...
  "remoting": {
    "rest": {
      "normalizeHttpPath": false,
      "xml": false,
      "handleErrors": false
    }
  }
}

middleware.development.json

{
  "final:after": {
    "strong-error-handler": {
      "params": {
        "debug": true,
        "log": true,
        "safeFields": [
          "code"
        ]
      }
    }
  }
}

middleware.json

{
  "final:after": {
    "strong-error-handler": {
      "params": {
        "debug": false,
        "log": true,
        "safeFields": [
          "code"
        ]
      }
    }
  }
}

我希望响应显示我抛出的错误,如下所示:

相反,它现在收到:

我去了strongloop-error-handler GitHub library,但找不到任何关于抛出原始错误的文档。有可能这样做吗?

【问题讨论】:

    标签: error-handling middleware strongloop loopback


    【解决方案1】:

    因此,我在 strong-error-handler 库中进行了挖掘,发现如果我们手动将 statusCode 设置为错误,并且必须在 400 - 499 之间,在技术上是可行的。

    buildResponseData()函数中:

    if (data.statusCode >= 400 && data.statusCode <= 499) {
      fillBadRequestError(data, err);
    } else {
      fillInternalError(data, err);
    }
    

    https://github.com/strongloop/strong-error-handler/blob/master/lib/data-builder.js#L37

    而fillBadRequestError()会返回原来的错误

    function fillBadRequestError(data, err) {
      data.name = err.name;
      data.message = err.message;
      data.code = err.code;
      data.details = err.details;
    }
    

    https://github.com/strongloop/strong-error-handler/blob/master/lib/data-builder.js#L69

    所以,在抛出错误之前,我们可以设置:

    const error = new Error();
    error.name = 'Custom Error';
    error.message = 'Error Message';
    error.statusCode = 404;
    throw error;
    

    那么即使"debug": false模式也会返回错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2018-04-29
      • 2011-06-01
      • 1970-01-01
      相关资源
      最近更新 更多