一種Vue應用程式錯誤/異常處理機制

2022-01-01 web前端開發

來自 | https://my.oschina.net/lav/blog/5146875

現在構建前端應用程式不像以前那麼簡單,現在,應用程式更加複雜和多樣。這就需要在構建前端應用程式的時候考慮很多,錯誤/異常處理是最重要的方面之一。在應用程式中擁有良好的錯誤處理機制可以帶來很多的好處,如下:良好的錯誤處理機制可以避免應用程式在出現未處理的異常時崩潰在生產環境下,可以輕鬆地存儲或者跟蹤錯誤記錄日誌,以便異常的處理可以統一處理錯誤信息,例如在不破壞應用程式交互的情況下,更改錯誤信息展示UI在前端應用程式中,最常見的錯誤/異常類型可能包括以下幾種:有很多方法可以解決上面的問題,例如使用 eslint 來檢查語法錯誤,使用適當的 try-catch 語句處理運行時錯誤,通過適當的單頁或者集成測試減少邏輯錯誤,http 錯誤可以通過使用 Promise 來處理。全局配置vue 應用程式有一個全局配置 vue.config,可以配置禁止日誌和告警、devtools、錯誤處理程序等等。可以用自己的配置覆蓋這些配置,對於錯誤處理,可以為其分配一個處理函數 Vue.config.errorHandler。在整個應用程式中,任何 Vue實例(Vue組件)中的任何未捕獲異常都會調用該處理程序。以下代碼片段為Vue 應用程式註冊一個錯誤處理方法(一般在項目的 main.js 文件中):

Vue.config.errorHandler = (error, vm, info) => {    console.info(error);    console.info(vm);    console.info(info);};

處理程序包含 3 個參數:

Vue.config.errorHandler 捕獲特定於Vue實例的錯誤,但無法捕獲 Vue 實例之外的錯誤,如服務。

要捕獲 Vue 實例之外的錯誤,可以使用 window.onerror 事件,可以註冊一個錯誤處理函數,該函數將捕獲所有非特定於 Vue 實例的未處理異常。下面的代碼片段為其應用註冊window.onerror 異常處理函數:

window.onerror = function(message, source, lineno, colno, error) {  };

自定義異常組件

通常項目中有一些可預知的異常需要自定義 UI ,可以自定義異常組件來統一接管異常的處理。

實現的邏輯是如果有異常顯示異常信息,否則就顯示組件信息,代碼如下:

<template>    <div>        <slot v-if="errors" name="errors">            <a-alert                :message="errors.title"                :description="errors.description"                show-icon                type="warning"                class="mb-2"            >            </a-alert>        </slot>        <slot v-else></slot>    </div></template>
<script>export default { name: "QtErrorContainer", props: { errors: Object, },};</script>

以上面的組件作為容器來加載其他組件,如通過後臺接口拉取列表數據,調用如下:

<QtErrorContainer :errors="errors">    <a-table ></a-table></QtErrorContainer>

上面的代碼在 errors 為 null 或者 false 的時候,顯示表格組件 <a-table></a-table>,否則不顯示而顯示異常信息。這樣實現好處就是所有可預知的異常都由統一的組件來處理,提高復用和靈活性。

日誌處理

對於日誌處理,可以封裝為一個獨立的類,如 logger ,負責收集Vue中所有的異常日誌,輸出到控制臺或者通過接口發送到伺服器存儲或藉助第三方日誌跟蹤平臺,只需要修改 logger 的處理方式即可,如下:

import { environment } from "@/environment/";
class Logger { constructor() { this.init(); }
init() { if (environment !== "production") { this.log = console.log.bind(console); this.debug = console.debug.bind(console); this.info = console.info.bind(console); this.warn = console.warn.bind(console); this.error = console.error.bind(console); this.toServer = this.error; } else { this.log = this.debug = this.info = this.warn = this.error = () => {}; this.toServer = (err) => { console.error(err); }; } }}
const logger = new Logger();
export { logger };

可以將 logger 類引用到上面的全局配置的處理方法中,如下:

import Vue from "vue";import { logger } from "@/logger";Vue.config.errorHandler = (error, vm, info) => {    logger.toServer({ error, vm, info });};
window.onerror = function (message, source, lineno, colno, error) { logger.toServer({ message, source, lineno, colno, error });};

總結

錯誤處理對於應用程式非常重要,在本文中,討論了Vue.config.errorHandler 使用生命周期鉤子的全局錯誤處理程序和自定義組件來處理可預知的異常。

本文提供了基本細節,藉助這些細節,可以輕鬆實現應用程式的錯誤處理並記錄它們,這將有助於創建更好的用戶體驗。

學習更多技能

請點擊下方公眾號

相關焦點

  • C語言代碼中異常的處理機制
    C++的異常機制為我們提供了更好的解決方法。異常處理的基本思想是:當出現錯誤時拋出一個異常,希望它的調用者能捕獲並處理這個異常。如果調用者也不能處理這個異常,那麼異常會傳遞給上級調用,直到被捕獲處理為止。如果程序始終沒有處理這個異常,最終它會被傳到C++運行環境,運行環境捕獲後通常只是簡單地終止這個程序。
  • Vue.js 2.5 發布,而這個會玩的團隊已經自研出用 Vue 開發小程序的...
    從 Release Notes 可以看到,Vue.js 2.5 有著更好的 TypeScript 集成,更好的錯誤處理,更好地支持單文件組件中的函數式組件以及與環境無關的服務端渲染。注意:TypeScript 用戶還應將以下包更新為最新版本從而兼容類型聲明:vue-router,vuex,vuex-router-sync 和vue-class-component。更好地錯誤處理在2.4及更早版本中,我們通常使用全局 config.errorHandleroption 來處理應用程式中的意外錯誤。
  • 代碼實踐 l 異常和錯誤的處理
    儘管異常提供了多個支持良好錯誤處理的功能,但它們無法為你完成所有工作。若要實現異常機制的優點,請在設計代碼時記住異常。」雖然通用的異常處理對於性能有一定消耗,但是它的優點還是很誘人的,尤其對於不依賴C語言的高級語言,沒有了兼容性的負擔,好處更是大於缺點。下面列出來對於很多高級語言,需要異常處理語法的理由:# 代碼的閱讀更順利。
  • PHP 中的錯誤和異常處理
    就我自己這些年寫程序的現狀看,我基本上就沒有真正明白什麼是異常處理,經常把異常和錯誤處理混為一談,關於代碼中的那些寫法,不是寫錯了,就是寫的太特麼爛了。恰好最近在寫一些類時用到異常處理了,順便就把這個整理下,但是這個僅代表我個人的一些理解和使用,也可能是錯誤的,還請謹慎閱讀。概述錯誤處理定義錯誤是指導致系統不能按照用戶意圖工作的一切原因、事件。
  • Python程序的異常處理和檢測
    處理程序出現的異常在前面學習Python語言的過程中,你一定遇到了程序崩潰或因未解決的錯誤而終止的情況。你會看到Python解釋器向你提供的出錯信息,包括錯誤名稱、原因和發生錯誤的行號。這就是程序在執行過程中發生的異常。我們來看幾個Python程序異常的例子。
  • C/C++程序運行時的異常處理
    (中國軟體網訊)程序中的錯誤分為編譯時的錯誤和運行時的錯誤。編譯時的錯誤主要是語法錯誤,比如:句尾沒有加分號,括號不匹配,關鍵字錯誤等,這類錯誤比較容易修改,因為編譯系統會指出錯誤在第幾行,什麼錯誤。
  • NET開發-在Web應用程式中使用異常處理語句解決用戶友好訪問
    .NET開發-異常處理語句1.概述一個完整的.NET應用程式是離不開異常處理的,否則當應用程式無法訪問時,我們也不知哪裡出了問題,且給用戶返回的錯誤頁面也很不友好因此可以使用異常處理語法來解決在未知情況下出現的問題,例如,如果.NET應用程式連接SQL Server資料庫出現了問題,此時如果使用了異常處理,就會在操作ADO.NET對象時拋出異常,並做出進一步的處理,記錄異常問題並給用戶一個友好的回饋頁面。C#異常處理語句 (異常不報錯,比如添加欄位不匹配) 錯誤是直接報錯,編譯不過去,語法錯誤,邏輯出錯。
  • Java中的異常處理概念以及異常處理方法
    在沒有異常處理的語言中,就必須使用 if 或 switch 等語句,配合所想得到的錯誤 狀況來捕捉程序裡所有可能發生的錯誤。但為了捕捉這些錯誤,編寫出來的程序代碼 經常有很多的 if 語句,有時候這樣也未必能捕捉到所有的錯誤,而且這樣做勢必導致 程序運行效率的降低。 Java 的異常處理機制恰好改進了這一點。
  • 異常處理機制在夸克區塊鏈中是如何設計的?
    異常的處理機制在異常機制引入之前,常利用if-else的方式處理異常。然而這種處理異常方式比較麻煩,同一個異常或者錯誤如果在多個地方出現,那麼在每個地方都要做相同處理,形成很多功能相同的冗餘代碼。return z 異常的傳遞try-catch的異常處理機制,支持嵌套。如果異常沒有在當前被捕獲上,則會沿著調用棧繼續往外拋出,直到最終被捕獲,或程序因該異常無捕獲而終止執行。
  • php7異常與錯誤處理和自定義異常
    中斷程序執行,除了修改ini文件,將錯誤信息寫到日誌中,什麼也做不了 E_PARSE //編譯時的語法解析錯誤自定義錯誤處理程序有的時候,php 中自帶的錯誤處理程序,並不能完全滿足我們得需要,大部分時候,我們都需要手動重寫異常處理。
  • 大型.NET項目中的異常處理機制-最佳實踐
    隨著我們的應用程式的增長,我們希望採用可管理的策略來處理錯誤,以保持用戶的體驗一致,更重要的是,為我們提供解決和修復問題的方法。異常處理的最佳實踐在.NET框架中表達錯誤條件的慣用方法是拋出異常。用戶可能會錯誤地認為某個操作成功,而實際上它無聲地失敗或未完成; 而開發人員不會獲得有關異常的任何信息,而不知道他可能需要修復應用程式中的某些內容。靜默隱藏錯誤僅適用於非常特定的場景,例如捕獲嘗試在處理程序中記錄錯誤時拋出的異常,以防止意外異常。
  • 製作跨瀏覽器兼容的Vue.js應用程式和所涉及的挑戰
    為使此設置正常工作,公司的應用程式必須以這樣的方式開發,即無論設備的軟體/硬體環境如何,它們都能在所有設備上完美運行。這不用擔心作業系統,配置或瀏覽器。這就是跨平臺移動開發支持的步驟。所有這些都是關於開發應用程式的方式,它們可以完美地運行在不同的平臺上。許多技術為這些應用程式的輕鬆開發提供了值得稱道的支持。
  • Java【8】異常處理
    ,編譯程序能夠自己發現並且提示我們錯誤的原因和位置;異常——程序運行時可能出現一些錯誤,比如試圖打開一個根本不存在的文件等。如果置之不理,程序便會終止或直接導致系統崩潰,顯然這不是我們希望看到的結果。異常處理機制——當程序出現錯誤後,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤後,程序執行的流程發生改變,程序的控制權轉移到異常處理器。★ 掌握和編寫異常處理機製程序:找到異常出現的邏輯、使用完整的數據測試、形成有針對性的異常處理。
  • 再談PHP錯誤與異常處理
    本文章分5個部分介紹我的異常處理的理解:一、異常與錯誤的概述二、ERROR的級別三、PHP異常處理中的黑科技四、巧妙的捕獲錯誤和異常五、自定義異常處理和異常嵌套六、PHP7中的異常處理一、異常與錯誤的概述  PHP中什麼是異常:  程序在運行中出現不符合預期的情況,允許發生
  • Python異常捕獲與處理
    什麼是異常?異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。當一個未捕獲的異常發生時,Python將結束程序並列印一個堆棧跟蹤信息,以及異常名和附加信息。
  • 面試須知(8):C#的異常處理機制(try...catch...finally)
    在 C# 語言中異常與異常處理語句包括三種形式,即 try catch、try finally、try catch finally。在上述三種異常處理的形式中所用到關鍵字其含義如下:try:一個 try 塊標識了一個將被激活的特定的異常的代碼塊。後跟一個或多個 catch 塊。
  • 揭密vue.js的神秘之處,小程序跟vue有什麼關係
    微容用的微信小程序平臺採用開發思路是前後端分離,前端採用vue.js+h5+jq開發,後端採用MVE的思路,用php開發,用vue.js構建來微信小程序可視化前端之後,微容給大家介紹下vue的來源和特徵。
  • python妙招-異常處理之try-except
    Python中檢測處理異常是非常重要的,這可以增加代碼的健壯性,我們在寫python程序的時候,會可能會遇到一些不可預料的情況,一旦遇到這些情況,運行時程序便可能會崩潰。比如:讀寫文件時候文件打開錯誤或者文件寫入錯誤,寫爬蟲時網絡請求失敗,返回錯誤404.再或者函數處理一些不確定參數時候,都可以用到異常捕獲。
  • 5個測試Vue.js程序的有用工具和庫
    -13166f930da8作者 | Nethmi Wijesinghe在過去的幾年中,vue.js已成為最受歡迎的Web應用程式框架之一,考慮到它的靈活性、易用性和生產力,這並不令人驚訝。但是,如果你未正確測試應用程式,那麼這些都不重要。軟體測試完善了整個流程,確保了產品的卓越質量。此外,它還能降低維護成本,提供更好的可用性和增強的功能。無論你想做什麼類型的測試,選擇合適的工具集都是優化軟體測試過程的重要因素。因此,在本文中,我將針對不同的測試角度,介紹vue.js的五個測試工具。
  • SAS程序錯誤及處理
    通常我們所開發的SAS程序,很少在第一次提交時就能夠運行完成並產生正確結果。程序越長越複雜,就越可能出現語法或邏輯錯誤。本文介紹了一些良好的SAS編程規範以減少程序錯誤,同時也描述了幾種常見的錯誤及錯誤發生後對應的處理方法。在開發SAS程序的過程中,遵循下面幾條規則可以使程序出錯的機率變小,並幫助發現錯誤。