Sep*_*eed 3 error-handling loopbackjs
我有一个控制器方法
// ... inside a controller class
@get('/error', {})
async error() {
throw new Error("This is the error text");
}
Run Code Online (Sandbox Code Playgroud)
我从此错误前端得到的响应是:
{“ error”:{“ statusCode”:500,“ message”:“内部服务器错误”}}
我想要的错误是:
{“ error”:{“ statusCode”:500,“ message”:“这是错误文本”}}
如何从Loopback 4中的控制器返回错误?
LoopBack团队您好
在控制器或存储库中,应完全按照问题所示抛出错误。
现在,当LoopBack捕获错误时,它将调用reject操作来处理它。内置实现通过reject记录消息console.error并返回HTTP响应,其中包含4xx / 5xx错误代码和描述错误的响应正文。
默认情况下,LoopBack隐藏HTTP响应中的实际错误消息。这是一项安全措施,可防止服务器泄漏潜在的敏感数据(无法打开文件的路径,无法访问后端服务的IP地址)。
在幕后,我们使用强错误处理程序将Error对象转换为HTTP响应。该模块提供两种模式:
debug: true):所有错误详细信息都包括在响应中,包括完整的堆栈跟踪。可以通过将以下行添加到Application构造函数来启用调试模式:
this.bind(RestBindings.ERROR_WRITER_OPTIONS).to({debug: true});
Run Code Online (Sandbox Code Playgroud)
在我们的文档中了解更多信息:序列>>处理错误
另外,您可以实现自己的错误处理程序并将其绑定为sequence action reject。请参阅我们的文档中的自定义序列操作。
export class MyRejectProvider implements Provider<Reject> {
constructor(
@inject(RestBindings.SequenceActions.LOG_ERROR)
protected logError: LogError,
@inject(RestBindings.ERROR_WRITER_OPTIONS, {optional: true})
protected errorWriterOptions?: ErrorWriterOptions,
) {}
value(): Reject {
return (context, error) => this.action(context, error);
}
action({request, response}: HandlerContext, error: Error) {
const err = <HttpError>error;
const statusCode = err.statusCode || err.status || 500;
const body = // convert err to plain data object
res.statusCode = statusCode;
res.setHeader('Content-Type', 'application/json; charset=utf-8');
res.end(JSON.stringify(body), 'utf-8');
this.logError(error, statusCode, request);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |