国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

總結(jié)Node.js中的一些錯誤類型

2019-11-20 09:14:28
字體:
供稿:網(wǎng)友

前言

Node.js應(yīng)用中可能會發(fā)生多種類型的錯誤。如:當(dāng)出現(xiàn)語法錯誤或運(yùn)行時錯誤時,會觸發(fā)JavaScript錯誤;當(dāng)試圖試訪問一個不存在或沒有訪問的文件時,會觸發(fā)系統(tǒng)錯誤;除JavaScript錯誤和系統(tǒng)錯誤錯誤外,用戶還可以自定義錯誤。

1. 錯誤分類

Node.js是一個JavaScript運(yùn)行時平臺,其應(yīng)用發(fā)生錯誤都是一個Error實例或Error子類的實例。

在Node.js應(yīng)用中,可能發(fā)生的錯誤有以下4類:

     1、標(biāo)準(zhǔn)JavaScript錯誤,如:

          <EvalError> : 當(dāng)調(diào)用 eval() 失敗時拋出

          <SyntaxError> : 當(dāng)使用非法JavaScript語法時拋出

          <RangeError> : 當(dāng)一個值不在指定范圍內(nèi)時拋出

          <ReferenceError> : 當(dāng)使用未定義的變量時拋出

          <TypeError> : 當(dāng)傳遞錯誤的類型參數(shù)拋出

          <URIError> : 當(dāng)一個全局的URI函數(shù)被錯誤使用時拋出

       2、系統(tǒng)錯誤,這類錯誤由底層系統(tǒng)觸發(fā),如試圖打開不存在的文件,試圖通過已關(guān)閉的Soket發(fā)送數(shù)據(jù)時等

       3、自定義錯誤,這類錯誤在應(yīng)用代碼中由用戶指定觸發(fā)

       4、斷言錯誤,這類錯誤在代碼違反合法邏輯時,由Node.js的assert模塊觸發(fā)

2. JavaScript錯誤與系統(tǒng)錯誤

2.1 JavaScript錯誤及自定義錯誤

標(biāo)準(zhǔn)JavaScript錯誤是由JavaScript語言提供的,表示語法錯誤或使用不當(dāng)?shù)腁PI。所有錯誤都是一個Error類實例,而標(biāo)準(zhǔn)JavaScript錯誤會由語言本身在發(fā)生錯誤時構(gòu)建。

自定義錯誤時,使用構(gòu)造函數(shù)創(chuàng)建實例即可:

> throw new Error('出錯了,這是錯誤信息');Error: 出錯了,這是錯誤信息  at repl:1:7  at REPLServer.defaultEval (repl.js:248:27)  at bound (domain.js:280:14)  at REPLServer.runBound [as eval] (domain.js:293:12)  at REPLServer.<anonymous> (repl.js:412:12)  at emitOne (events.js:82:20)  at REPLServer.emit (events.js:169:7)  at REPLServer.Interface._onLine (readline.js:210:10)  at REPLServer.Interface._line (readline.js:549:8)  at REPLServer.Interface._ttyWrite (readline.js:826:14)

如上,我們自定義了一個錯誤,并使用throw關(guān)鍵字將錯誤拋出。在這個錯誤對象中,包括錯誤信息message和錯誤的堆棧信息stack,在異常捕獲后,可以通過以下兩個屬性來訪問這些信息:

       1、error.message - 錯誤信息

       2、error.stack - 錯誤堆棧追蹤信息

除Error實例本身的屬性外,還可自定義一些錯誤屬性。如,自定義一個表示狀態(tài)的屬性status:

var error = new Error('您訪問的頁面不存在');error.status = 404;

2.2 系統(tǒng)錯誤

系統(tǒng)錯誤是對JavaScript錯誤Error對象的一個擴(kuò)展,它們表示程序能夠處理的操作錯誤,這些錯誤信息都是在系統(tǒng)級別生成的。系統(tǒng)錯誤實例中除Error實例中的屬性外,還包括以下幾個屬性:

       1、error.syscall - 一個表示失敗的系統(tǒng)調(diào)用信息的字符串

       2、error.errno - 一個整數(shù)的錯誤碼

       3、error.code - 表示錯誤字符串,通常是大寫字母E開頭

3. 異常捕獲

Node.js采用事件驅(qū)動、異步編程基制,這意味著try / catch捕獲不到異步處理發(fā)生的錯誤。針對這種情況,我們可以使用以下兩種方式來捕獲或傳遞錯誤:

Node.js式回調(diào)函數(shù)中的異常捕獲

Node.js有很多異步API,這些API通過回調(diào)函數(shù)callback進(jìn)行后續(xù)處理。如果發(fā)生錯誤,通常會在callback函數(shù)的第一個參數(shù)中包含一個Error對象;如果未發(fā)生錯誤,第一參數(shù)將是null。如:

const fs = require('fs');fs.readFile('一個不存在的文件', (err, data) => { if (err) {  console.error('讀取文件錯誤', err);  return; } // 其它處理});

基于事件的錯誤處理

如果對象是一個EventEmitter,可以通過對象 的'error'事件捕獲并處理錯誤:

const net = require('net');const connection = net.connect('localhost');// 為stream添加一個 'error' 事件處理器:connection.on('error', (err) => { // 如果連接被服務(wù)器重置或連接不到指定的服務(wù)器 // 或其它連接錯誤時,錯誤會被傳遞到這里 console.error(err);});connection.pipe(process.stdout);

總結(jié)

以上就是關(guān)于Node.js中的一些錯誤類型的總結(jié),能夠理解Node.js中錯誤類型,就可以幫我們更好的進(jìn)行錯誤處理和異常捕獲。希望本文的內(nèi)容對大家能有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永善县| 霸州市| 南郑县| 稻城县| 遂昌县| 高陵县| 勐海县| 红安县| 扎赉特旗| 鹿泉市| 隆昌县| 宁夏| 中牟县| 司法| 青冈县| 佛冈县| 喀什市| 科技| 拉萨市| 临澧县| 荥阳市| 建平县| 宝兴县| 威海市| 绥宁县| 长武县| 海丰县| 辉县市| 新巴尔虎右旗| 论坛| 凌海市| 禹城市| 长寿区| 拉萨市| 隆安县| 柯坪县| 赤城县| 朔州市| 枣阳市| 安庆市| 威远县|