如何在Angular应用程序中获取所有控制台错误消息

Masoud Motallebipour

我正在开发一个有角度的应用程序,问题是当我想在某些智能电视上调试它时,没有调试模式,并且在后台我有一些错误导致应用程序崩溃,因此,有什么方法可以使全部崩溃错误消息并将其打印在我的应用程序的页面的一部分中?

实际上,我想在自己的应用程序中使用某种虚拟控制台。

非常感谢

多纳塔斯

有几种调试方法:

  • Console.log()-这会将您的消息输出到控制台。不确定是否可以在电视上看到它。
  • 创建一个全局错误处理程序,如Angular文档中所提供

如果上述方法不起作用,则可以尝试使用此解决方案,我不久前还通过使用快餐栏组件在互联网上的某个地方发现了该解决方案,该组件将错误显示为弹出窗口:

error.service.ts:

import { Injectable } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';

@Injectable({
    providedIn: 'root'
})
export class ErrorService {

    checkOnline()
    {
        if (!navigator.onLine) {
            return 'No Internet Connection';
        }
    }

    getClientMessage(error: Error): string {
        return error.message ? error.message : error.toString();
    }

    getClientStack(error: Error): string {
        return error.stack;
    }

    getServerMessage(error: HttpErrorResponse): string {
        var msg = error.error.Message;
        if (!!msg)
            return msg + " : " + error.error.ExceptionMessage;
        return "Application can not execute because API hasn\'t been started";
    }

    getServerStack(error: HttpErrorResponse): string {
        return error.error.StackTrace;
    }
}

global-error-handler-component.ts:

import { ErrorHandler, Injectable, Injector } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { ErrorService } from './services/error.service';
import { MatSnackBar } from '@angular/material';

@Injectable()
export class GlobalErrorHandler implements ErrorHandler
{
    constructor(private injector: Injector, public snackBar: MatSnackBar) { }

    handleError(error: Error | HttpErrorResponse)
    {
        const errorService = this.injector.get(ErrorService);
        let message;
        let stackTrace = errorService.getClientStack(error);

        if (error instanceof HttpErrorResponse) // Server Error
            message = errorService.getServerMessage(error);
        else // Client Error
            message = errorService.getClientMessage(error);

        this.snackBar.open(message, 'X', { panelClass: ['error'] });
    }
}

app.module.ts:

import { GlobalErrorHandler } from './global-error-handler.component';
import { MatSnackBarModule } from '@angular/material/snack-bar';
...
  imports: [
...
    MatSnackBarModule,
...
  ],
  providers: [
...
    { provide: ErrorHandler, useClass: GlobalErrorHandler },
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不解压所有依赖项的情况下用Maven组装控制台应用程序?

如何在JVM控制台应用程序中处理^ C?

如何在.NET控制台应用程序中获取应用程序的路径?

如何在Yii 2.0中的Web应用程序中调用控制台命令

如何从.Net Core控制台应用程序中获取版权,版本,公司等信息?

如何在运行时获取所有控制台消息以登录Cordova iOS?

如何在具有多个控制台应用程序项目的webjob中定义默认exe?

如何修复C#控制台应用程序中的错误KeyEventHandler?

如何在.NET Core控制台应用程序中获取MacOS用户名?

如何停止控制台应用程序中的闪烁?

如何记录客户端Angular应用程序中发生的所有可能的控制台错误?

如何在服务中获取IHostApplicationLifetime并将其注入到容器中(控制台应用程序)

在VB.NET控制台应用程序中,如何从My.Settings对象获取应用程序的设置?

如何在没有python控制台的情况下运行tkinter应用程序

Delphi控制台应用程序:如何在消息对话框中添加OnHelp?

更新.netcore控制台应用程序列中的所有空值

如何从.net应用程序禁用到Spark控制台的所有日志记录信息

如何退出/中断控制台应用程序中的Windows消息循环以及Windows桌面应用程序的引用?

如何在没有控制台的情况下创建gui应用程序?

如何使用PeekNamedPipe()从Delphi Code中读取运行控制台应用程序的错误

如何在iOS中从我的应用程序获取所有消息传递应用程序列表

如何在node.js控制台应用程序中应用模块模式?

控制台应用程序中的Unity Config错误

如何在程序类(控制台应用程序)中访问变量

如何在应用程序中过滤RabbitMQ控制台侦听消息

C# 控制台应用程序,如何使所有结果等于 totalResult?

在控制台应用程序中获取表名称

如何在 .NET 控制台应用程序中获取路径

编码评估应用程序:如何在 Angular 应用程序中运行带有输出的控制台