Error handling 当调试模式为false时,如何在强错误处理程序中设置自定义错误

Error handling 当调试模式为false时,如何在强错误处理程序中设置自定义错误,error-handling,middleware,strongloop,loopback,Error Handling,Middleware,Strongloop,Loopback,我正在使用loopbackv3.x和强大的错误处理程序来处理我的项目错误。在开发模式下,错误响应很好,但在生产模式下,它会向客户端抛出不同的错误 我意识到是debug:false使它抛出了一个{error:{statusCode:500,message:'internalserver error'}}}基于关于 但是,当我使用debug:false抛出新的错误“error Messages”时,我想在生产中显示我的错误,以避免暴露敏感数据,如文件路径、URL和堆栈跟踪 以下是我的配置文件: co

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

我意识到是debug:false使它抛出了一个{error:{statusCode:500,message:'internalserver error'}}}基于关于

但是,当我使用debug:false抛出新的错误“error Messages”时,我想在生产中显示我的错误,以避免暴露敏感数据,如文件路径、URL和堆栈跟踪

以下是我的配置文件:

config.json

middleware.development.json

middleware.json

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

相反,现在它收到了:


我已经去了,但找不到任何关于抛出原始错误的文档。有可能吗

因此,我深入研究了strong error handler库,发现如果我们手动将statusCode设置到错误中,那么在技术上是可以做到的,并且必须在400-499之间

在buildResponseData函数中:

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

const error = new Error();
error.name = 'Custom Error';
error.message = 'Error Message';
error.statusCode = 404;
throw error;
然后,即使使用debug:false模式,它也会返回错误

{
  "final:after": {
    "strong-error-handler": {
      "params": {
        "debug": true,
        "log": true,
        "safeFields": [
          "code"
        ]
      }
    }
  }
}
{
  "final:after": {
    "strong-error-handler": {
      "params": {
        "debug": false,
        "log": true,
        "safeFields": [
          "code"
        ]
      }
    }
  }
}
if (data.statusCode >= 400 && data.statusCode <= 499) {
  fillBadRequestError(data, err);
} else {
  fillInternalError(data, err);
}
function fillBadRequestError(data, err) {
  data.name = err.name;
  data.message = err.message;
  data.code = err.code;
  data.details = err.details;
}
const error = new Error();
error.name = 'Custom Error';
error.message = 'Error Message';
error.statusCode = 404;
throw error;