当前位置:

首页 > 编程开发 > VUE前端工程报错监控问题及解决

VUE前端工程报错监控问题及解决

故事的开始 做前端开发的同学,是不是经常有这种冲动:希望代码一出问题,自己能第一时间收到报错信息,而不是等用户找上门来才发现?如果能提前感知到异常,修复效率完全不一样。 要实现这种“先知先觉”,核心就两件事:错误捕获 和 错误信息上报。缺一不可。 错误捕获 Vue3 提供了一个全局的 errorHa

本文目录

    故事的开始

    做前端开发的同学,是不是经常有这种冲动:希望代码一出问题,自己能第一时间收到报错信息,而不是等用户找上门来才发现?如果能提前感知到异常,修复效率完全不一样。

    要实现这种“先知先觉”,核心就两件事:错误捕获 和 错误信息上报。缺一不可。

    错误捕获

    Vue3 提供了一个全局的 errorHandler,可以指定一个处理函数,专门处理组件渲染函数和侦听器执行期间抛出的未捕获错误。这个函数被调用时,能拿到错误信息和对应的应用实例。

    在 main.ts 里加上这样一段:

    app.config.errorHandler = (err, vm, info) => {  console.log('[全局异常]', err, vm, info)}

    随手制造一个报错试试看,控制台输出类似这样:

    [全局异常] ReferenceError: www is not defined    at asset-mgmt.vue:241:15    at callWithErrorHandling (runtime-core.esm-bundler.js:155:22)    at callWithAsyncErrorHandling (runtime-core.esm-bundler.js:164:21)    at hook.__weh.hook.__weh (runtime-core.esm-bundler.js:2667:29)    at flushPostFlushCbs (runtime-core.esm-bundler.js:356:32)    at flushJobs (runtime-core.esm-bundler.js:401:9) VueInstance mounted hook

    这样一来,全局错误就被稳稳抓住了。不过,捕获只是第一步,怎么把错误信息发出去,才是重头戏。

    错误信息上报

    上报的方式很多,这里单说通过邮件发送。邮件方案又分两条路:一种是调后台接口让服务端代发,另一种是前端自己搞定发送。本着“自己的事自己做”的思路,我们试试前端独立实现邮件发送。

    Nodemailer

    首先登场的是 Nodemailer,一个简单易用的 Node.js 邮件发送模块。它支持 SMTP、sendmail、Amazon SES,Unicode 字符集也没问题,基本可以覆盖常见场景。

    测试代码长这样:

    /* eslint no-console: 0 */
    'use strict';
    const nodemailer = require('nodemailer');
    
    nodemailer.createTestAccount((err, account) => {
        if (err) {
            console.error('Failed to create a testing account');
            console.error(err);
            return process.exit(1);
        }
        console.log('Credentials obtained, sending message...');
        let transporter = nodemailer.createTransport(
            {
                host: "smtp.qq.com",
                port: 465,
                secure: true,
                auth: {
                  user: "xxxxx@qq.com",
                  pass: "tkelxjoezeatbjee",
                },
                logger: true,
                transactionLog: true
            },
            {
                from: 'Nodemailer ',
                headers: {
                    'X-Laziness-level': 1000
                }
            }
        );
        let message = {
            to: 'xxxxx@qq.com',
            subject: 'Nodemailer is unicode friendly ✔' + Date.now(),
            text: 'Hello to myself!',
            html: ``,
            amp: `134253647`,
            attachments: [],
            list: {}
        };
        transporter.sendMail(message, (error, info) => {
            if (error) {
                console.log('Error occurred');
                console.log(error.message);
                return process.exit(1);
            }
            console.log('Message sent successfully!');
            console.log(nodemailer.getTestMessageUrl(info));
            transporter.close();
        });
    });

    上面的例子配置了 QQ 邮箱给自己发邮件,运行后的日志显示连接、认证、发送都很顺利:

    [2022-06-17 08:32:05] DEBUG Creating transport: nodemailer (6.7.5; +https://nodemailer.com/; SMTP/6.7.5[client:6.7.5])
    [2022-06-17 08:32:05] DEBUG Sending mail using SMTP/6.7.5[client:6.7.5]
    [2022-06-17 08:32:05] DEBUG [hvJt01jlQc8] Resolved smtp.qq.com as 14.18.175.202 [cache miss]
    [2022-06-17 08:32:05] INFO [hvJt01jlQc8] Secure connection established to 14.18.175.202:465
    ...
    Message sent successfully!
    [2022-06-17 08:32:06] INFO [hvJt01jlQc8] Connection closed

    VUE前端工程报错监控问题及解决

    到这里,发邮件功能就实现了。接下来只要把错误信息拼到邮件内容里,就能完成上报。

    不过,踩过的坑也得说出来,免得大家再掉进去:

    1. 这是个 Node 服务,不是浏览器端直接能用的。 需要用 node 命令启动。当时卡了好久,傻傻以为 js 直接调就完了。所以延伸出一个问题:必须事先启动这个服务,才能在上报时调用。
    2. 配置里的邮箱需要保持一致。 发件人和收件人用同一个邮箱,想着简单,结果还是被绊了一下。

    VUE前端工程报错监控问题及解决

    Formspree

    如果连 Node 服务都不想起,那 Formspree 可以了解一下。它是一个第三方服务,通过表单提交的方式帮你转发邮件。

    大致流程如下:

    1. 注册并登录 Formspree。
    2. 配置接收信息的邮箱,并完成邮箱验证。

    VUE前端工程报错监控问题及解决

    1. 配置一个接收信息的 form,会生成一个调用链接,例如 https://formspree.io/f/xvolyepj。

    说下实际遇到的坑:

    • form 名称在新增时一定要保证正确,虽然修改也能成功,但会影响接收。
    • form 里设置的内容和实际传递的数据字段其实无关,你可以在调用时自由指定字段名。
    1. 在 errorHandler 里调用:
    app.config.errorHandler = (err, vm, info) => {
      console.log('[全局异常]', err, vm, info)
      axios({
        method: 'post',
        url: 'https://formspree.io/f/xvolyepj',
        data: {
          errorMsg: err.message,
          errorDetail: err.stack,
          sss: '44444'
        }
      })
    }
    1. 结果:

    VUE前端工程报错监控问题及解决

    这个方案除了邮箱需要托管给第三方,其实挺方便的。但是……万事怎么可能没有“但是”?测试到后面收到一封邮件才发现,它有限额:两个邮箱,每月总共 50 条。超过就得付费,土豪请办卡。

    1. 后续思考

    这两种邮件通知方案都存在一个致命缺陷——在内网环境下,很可能无法和服务端建立网络连接,导致功能不可用。如果项目部署在内网,就需要另想办法了。

    总结

    从错误捕获到邮件上报,Nodemailer 和 Formspree 是两条比较直接的路径,各有优劣。前者需要自己维护一个 Node 服务,后者受限于第三方服务和网络环境。选择哪种,取决于实际部署条件和预算。希望这些经验和坑能给你一些参考。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景
    GitHub六个AI开源项目能做什么?软件理解、语音与求职场景

    解析六个GitHub AI开源项目的具体用途,包括软件静态分析、智能体回答检查、多语言配音、求职材料生成、本地代码检索及动态歌词展示,帮助开发者根据实际需求筛选工具并正确验证结果。

    opencode安装skills教程及本地配置方法
    opencode安装skills教程及本地配置方法

    遇到OpenCode Skills无法加载或配置无效?本文手把手教你完成Skills的安装、环境变量设置及本地调试,避开常见坑点,让AI助手更懂你的代码习惯。

    如何开启Visual Studio2022实时代码分析警告提示
    如何开启Visual Studio2022实时代码分析警告提示

    解决 Visual Studio 2022 编辑时不显示代码分析警告的问题。指南涵盖 .NET 项目实时分析设置、Roslyn 分析器范围调整及错误列表来源筛选,确保开发者能高效利用实时代码诊断功能。

    如何在Visual Studio2022查看变量监视窗口调试程序
    如何在Visual Studio2022查看变量监视窗口调试程序

    详解 Visual Studio 2022 调试技巧:包括断点设置、监视窗口开启方法、变量添加步骤以及通过 F10 单步执行观察变量值变化的全过程。

    Visual Studio2017设置默认编码为UTF-8不带BOM
    Visual Studio2017设置默认编码为UTF-8不带BOM

    针对 Visual Studio 2017 缺乏全局默认编码选项的情况,详解如何利用 .editorconfig 设定项目级 UTF-8 无 BOM 规则,以及手动转换现有文件并校验字节的方法。

    Visual Studio2022F5调试提示启动项目未配置怎么修复
    Visual Studio2022F5调试提示启动项目未配置怎么修复

    解决 Visual Studio 2022 F5 调试报错问题,通过设置启动项目、检查解决方案属性及正确区分类库与应用项目,快速恢复调试功能。

    Visual Studio2022NuGet包还原失败离线处理方案
    Visual Studio2022NuGet包还原失败离线处理方案

    解决Visual Studio 2022离线环境中NuGet包还原失败的难题,涵盖依赖链分析、本地源配置、包集收集及隔离验证步骤,帮助开发者构建稳定的离线开发环境。

    Visual Studio2017大项目加载缓慢,优化加载性能技巧
    Visual Studio2017大项目加载缓慢,优化加载性能技巧

    解决Visual Studio 2017大型项目加载慢的实用指南。涵盖性能监测、扩展管理、文档恢复优化及版本兼容性检查,帮助开发者精准定位瓶颈并提升工作效率。

    Visual Studio2022设置多启动项目同时调试运行
    Visual Studio2022设置多启动项目同时调试运行

    详解 Visual Studio 2022 多启动项目配置方法,包括启动动作选择、顺序调整及调试技巧,帮助开发者高效调试分布式或前后端分离应用。

    fastapi下载文件接口实现教程
    fastapi下载文件接口实现教程

    深入解析在FastAPI框架中实现文件下载接口的完整方案,涵盖基于FileResponse的本地静态文件传输、基于StreamingResponse的分块流式传输、RFC 5987中文文件名编码规范、路径穿越安全防御及BackgroundTasks临时文件清理,并配备详细代码示例与架构解析图。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。