最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年08月15日 17:24:48   投稿:daisy  
NodeJS 的錯(cuò)誤處理讓人痛苦,在很長(zhǎng)的一段時(shí)間里,大量的錯(cuò)誤被放任不管。但是要想建立一個(gè)健壯的 Node.js 程序就必須正確的處理這些錯(cuò)誤,而且這并不難學(xué)。下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)。

前言

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

1. 錯(cuò)誤分類

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

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

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

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

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

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

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

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

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

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

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

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

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

2.1 JavaScript錯(cuò)誤及自定義錯(cuò)誤

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

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

> throw new Error('出錯(cuò)了,這是錯(cuò)誤信息');
Error: 出錯(cuò)了,這是錯(cuò)誤信息
  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)

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

       1、error.message - 錯(cuò)誤信息

       2、error.stack - 錯(cuò)誤堆棧追蹤信息

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

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

2.2 系統(tǒng)錯(cuò)誤

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

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

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

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

3. 異常捕獲

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

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

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

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

基于事件的錯(cuò)誤處理

如果對(duì)象是一個(gè)EventEmitter,可以通過對(duì)象 的'error'事件捕獲并處理錯(cuò)誤:

const net = require('net');
const connection = net.connect('localhost');

// 為stream添加一個(gè) 'error' 事件處理器:
connection.on('error', (err) => {
 // 如果連接被服務(wù)器重置或連接不到指定的服務(wù)器
 // 或其它連接錯(cuò)誤時(shí),錯(cuò)誤會(huì)被傳遞到這里
 console.error(err);
});

connection.pipe(process.stdout);

總結(jié)

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

相關(guān)文章

  • node.js配置Token驗(yàn)證的2種方式總結(jié)

    node.js配置Token驗(yàn)證的2種方式總結(jié)

    token驗(yàn)證,在設(shè)計(jì)登錄注冊(cè)和一些權(quán)限接口時(shí)發(fā)揮作用,下面這篇文章主要給大家介紹了關(guān)于node.js配置Token驗(yàn)證的2種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Node.js學(xué)習(xí)之地址解析模塊URL的使用詳解

    Node.js學(xué)習(xí)之地址解析模塊URL的使用詳解

    url模塊是nodejs里面的一個(gè)簡(jiǎn)單的模塊,下面這篇文章主要給大家介紹了關(guān)于Node.js學(xué)習(xí)之地址解析模塊URL使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Node.js中http模塊和導(dǎo)出共享問題

    Node.js中http模塊和導(dǎo)出共享問題

    這篇文章主要介紹了Node.js中http模塊和導(dǎo)出共享,通過?http?模塊提供的?http.createServer()?方法,就能方便的把一臺(tái)普通的電腦,變成一臺(tái)?web?服務(wù)器,從而對(duì)外提供?web?資源服務(wù),本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • nodejs異步編程基礎(chǔ)之回調(diào)函數(shù)用法分析

    nodejs異步編程基礎(chǔ)之回調(diào)函數(shù)用法分析

    這篇文章主要介紹了nodejs異步編程基礎(chǔ)之回調(diào)函數(shù)用法,結(jié)合具體實(shí)例形式分析了阻塞與非阻塞形式下回調(diào)函數(shù)具體功能、使用技巧,需要的朋友可以參考下
    2018-12-12
  • 淺談JS前端模塊化的幾種規(guī)范

    淺談JS前端模塊化的幾種規(guī)范

    這篇文章主要介紹了JS前端模塊化的幾種規(guī)范,對(duì)前端模塊化感興趣的同學(xué),可以參考下
    2021-05-05
  • Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip

    Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip

    這篇文章主要為大家詳細(xì)介紹了Node koa服務(wù)器實(shí)現(xiàn)獲取客戶端ip的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2025-02-02
  • node實(shí)現(xiàn)簡(jiǎn)單的反向代理服務(wù)器

    node實(shí)現(xiàn)簡(jiǎn)單的反向代理服務(wù)器

    本篇文章主要介紹了node實(shí)現(xiàn)簡(jiǎn)單的反向代理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js Net 模塊提供了一些用于底層的網(wǎng)絡(luò)通信的小工具,包含了創(chuàng)建服務(wù)器/客戶端的方法,下面這篇文章主要給大家介紹了Node.js利用Net模塊實(shí)現(xiàn)命令行多人聊天室的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • 詳解Node.js中exports和module.exports的區(qū)別

    詳解Node.js中exports和module.exports的區(qū)別

    這篇文章主要介紹了詳解Node.js中exports和module.exports的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • nodejs中Express與Koa2對(duì)比分析

    nodejs中Express與Koa2對(duì)比分析

    提到Node.js開發(fā),不得不提目前炙手可熱的2大框架express和koa。Express誕生已有時(shí)日,是一個(gè)簡(jiǎn)潔而靈活的web開發(fā)框架,使用簡(jiǎn)單而功能強(qiáng)大。Koa相對(duì)更為年輕,是Express框架原班人馬基于ES6新特性重新開發(fā)的敏捷開發(fā)框架,現(xiàn)在可謂風(fēng)頭正勁,大有趕超Express之勢(shì)。
    2018-02-02

最新評(píng)論

沈丘县| 右玉县| 南华县| 宿州市| 宜良县| 义乌市| 湘乡市| 祁东县| 呼图壁县| 临颍县| 措勤县| 宁武县| 海阳市| 洛宁县| 江永县| 彝良县| 秦皇岛市| 方山县| 长泰县| 临沂市| 桂林市| 泗水县| 新郑市| 保靖县| 襄樊市| 瑞金市| 万全县| 晋州市| 延长县| 英山县| 老河口市| 营山县| 沙洋县| 辽阳市| 镇沅| 正安县| 清镇市| 宜城市| 阿克陶县| 澄江县| 辽阳市|