代码之家  ›  专栏  ›  技术社区  ›  Jee Mok ecanf

调试模式为假时如何在强错误处理程序中设置自定义错误

  •  0
  • Jee Mok ecanf  · 技术社区  · 8 年前

    我正在使用环回v3.x和强错误处理程序来处理我的项目错误。在开发模式下,错误响应很好,但在生产模式下,它会向客户机抛出不同的错误。

    我意识到正是“debug”:false“ 使得它抛出了一个 错误:statuscode:500,message:'internal server error'code>(基于loopback文档关于

    但我想在抛出 new error('error messages')时在生产中显示我的错误。 with “debug”:false (to keep the sensitive data such as file path,urls,and stack traces out from exposure)]

    以下是我的配置文件:

    config.json

    < PRE> >代码> … “远程处理”:{ “休息”:{ “NormalizeHttpPath”:错误, “XML”:FALSE, “handleerrrors”:错误 } } } < /代码>

    middleware.development.json

    < PRE> >代码> “final:after”:。{ “强错误处理程序”:。{ “PARAMS”:{ “调试”:真的, “日志”:真的, “安全领域”: “代码” ] } } } } < /代码>

    中间件.json

    < PRE> >代码> “final:after”:。{ “强错误处理程序”:。{ “PARAMS”:{ “调试”:FALSE, “日志”:真的, “安全领域”: “代码” ] } } } } < /代码>

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

    相反,现在它收到:

    我已经转到 strongloop error handler github library 但找不到有关引发原始错误的任何文档。可以这样做吗?

    我意识到 "debug": false" 这使得它抛出一个 { error: { statusCode: 500, message: 'Internal Server Error' } } (根据有关 strong-error-handler )

    但我想在投球时展示我的失误 new Error('Error Messages') 具有 "debug": false (防止敏感数据(如文件路径、URL和堆栈跟踪)暴露)

    以下是我的配置文件:

    组态JSON

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

    中间件.development.json

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

    中森

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

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

    相反,现在它收到: enter image description here

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jee Mok ecanf    8 年前

    所以我在强错误处理程序库中进行了挖掘,发现如果我们设置一个 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 模式

    推荐文章