调试模式为 false 时如何在强错误处理程序中设置自定义错误
How to set custom error in strong-error-handler when debug mode is false
我正在使用 Loopback v3.x 和 strong-error-handler 来处理我的项目错误。错误响应在开发模式下很好,但在生产模式下,它会向客户端抛出不同的错误。
我意识到是 "debug": false"
使它抛出 { error: { statusCode: 500, message: 'Internal Server Error' } }
(基于关于 strong-error-handler 的 Loopback 文档)
但是当我用 "debug": false
抛出 new Error('Error Messages')
时,我想在生产中显示我的错误(以防止敏感数据,如文件路径、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 但找不到任何关于抛出原始错误的文档。有可能这样做吗?
所以我深入研究了 strong-error-handler 库,发现如果我们手动将 statusCode
设置到错误中并且必须在 400 - 499 之内,那么技术上是可行的.
in buildResponseData()
function:
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
and the fillBadRequestError() will return the original error
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;
然后它会 return 即使使用 "debug": false
模式
的错误
我正在使用 Loopback v3.x 和 strong-error-handler 来处理我的项目错误。错误响应在开发模式下很好,但在生产模式下,它会向客户端抛出不同的错误。
我意识到是 "debug": false"
使它抛出 { error: { statusCode: 500, message: 'Internal Server Error' } }
(基于关于 strong-error-handler 的 Loopback 文档)
但是当我用 "debug": false
抛出 new Error('Error Messages')
时,我想在生产中显示我的错误(以防止敏感数据,如文件路径、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 但找不到任何关于抛出原始错误的文档。有可能这样做吗?
所以我深入研究了 strong-error-handler 库,发现如果我们手动将 statusCode
设置到错误中并且必须在 400 - 499 之内,那么技术上是可行的.
in
buildResponseData()
function:
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
and the fillBadRequestError() will return the original error
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;
然后它会 return 即使使用 "debug": false
模式