คำนำ
มีข้อผิดพลาดหลายประเภทที่อาจเกิดขึ้นในแอปพลิเคชัน Node.js ตัวอย่างเช่น: เมื่อเกิดข้อผิดพลาดทางไวยากรณ์หรือข้อผิดพลาดรันไทม์เกิดขึ้นข้อผิดพลาด JavaScript จะถูกเรียกใช้; เมื่อพยายามเข้าถึงไฟล์ที่ไม่มีอยู่หรือไม่สามารถเข้าถึงได้ข้อผิดพลาดของระบบจะถูกเรียกใช้ นอกเหนือจากข้อผิดพลาดของ JavaScript และข้อผิดพลาดข้อผิดพลาดของระบบผู้ใช้ยังสามารถปรับแต่งข้อผิดพลาดได้
1. การจำแนกประเภท
Node.js เป็นแพลตฟอร์มรันไทม์ JavaScript และข้อผิดพลาดของแอปพลิเคชันล้วนเป็น Error หรืออินสแตนซ์ subclass Error
ในแอปพลิเคชัน Node.js มีข้อผิดพลาดสี่ประการที่เป็นไปได้:
1. ข้อผิดพลาด JavaScript มาตรฐานเช่น:
<EvalError> : โยนเมื่อ eval() การโทรล้มเหลว
<SyntaxError> : โยนเมื่อใช้ไวยากรณ์ JavaScript ที่ผิดกฎหมาย
<RangeError> : โยนเมื่อค่าไม่อยู่ในช่วงที่ระบุ
<ReferenceError> : โยนเมื่อใช้ตัวแปรที่ไม่ได้กำหนดไว้
<TypeError> : เมื่อผ่านพารามิเตอร์ประเภทข้อผิดพลาด
<URIError> : โยนเมื่อใช้ฟังก์ชั่น URI ทั่วโลกอย่างไม่ถูกต้อง
2. ข้อผิดพลาดของระบบ ข้อผิดพลาดประเภทนี้ถูกทริกเกอร์โดยระบบพื้นฐานเช่นการพยายามเปิดไฟล์ที่ไม่มีอยู่จริงพยายามส่งข้อมูลผ่าน SOKE ที่ปิด ฯลฯ
3. ข้อผิดพลาดที่กำหนดเองข้อผิดพลาดดังกล่าวจะถูกเรียกใช้โดยผู้ใช้ในรหัสแอปพลิเคชัน
4. ข้อผิดพลาดการยืนยัน เมื่อรหัสละเมิดตรรกะทางกฎหมายข้อผิดพลาดประเภทนี้จะถูกเรียกใช้โดยโมดูล assert node.js
2. ข้อผิดพลาดของ JavaScript และข้อผิดพลาดของระบบ
2.1 ข้อผิดพลาดของ JavaScript และข้อผิดพลาดที่กำหนดเอง
ข้อผิดพลาด JavaScript มาตรฐานจัดทำโดยภาษา JavaScript ซึ่งระบุข้อผิดพลาดทางไวยากรณ์หรือการใช้ APIs ที่ไม่เหมาะสม ข้อผิดพลาดทั้งหมดเป็นอินสแตนซ์ของคลาส Error ในขณะที่ข้อผิดพลาด JavaScript มาตรฐานถูกสร้างขึ้นโดยภาษาเองเมื่อเกิดข้อผิดพลาด
เมื่อปรับแต่งข้อผิดพลาดให้ใช้ตัวสร้างเพื่อสร้างอินสแตนซ์:
> โยนข้อผิดพลาดใหม่ ('เกิดข้อผิดพลาดนี่คือข้อความแสดงข้อผิดพลาด'); ข้อผิดพลาด: พบข้อความแสดงข้อผิดพลาดที่ REPL: 1: 7 ที่ ReplServer.defaultEval (repl.js: 248: 27) ที่ Bound (domain.js: 280: 14) ที่ Replserver.runbound (repol.js: 412: 12) ที่ emitone (events.js: 82: 20) ที่ replserver.emit (events.js: 169: 7) ที่ replserver.interface._online (readline.js: 210: 10) (readline.js: 826: 14) ดังกล่าวข้างต้นเราปรับแต่งข้อผิดพลาดและโยนข้อผิดพลาดโดยใช้คำหลัก ในวัตถุข้อผิดพลาดนี้จะมี message ข้อผิดพลาดและ stack ข้อมูลข้อผิดพลาดสแต็ก หลังจากการจับข้อยกเว้นข้อมูลนี้สามารถเข้าถึงได้ผ่านคุณสมบัติสองประการต่อไปนี้:
1. error.message - ข้อความแสดงข้อผิดพลาด
2. error.stack - ข้อมูลการติดตามสแต็กข้อผิดพลาด
นอกเหนือจากคุณสมบัติของอินสแตนซ์ข้อผิดพลาดแล้วคุณยังสามารถปรับแต่งคุณสมบัติข้อผิดพลาดบางอย่างได้ ตัวอย่างเช่นปรับแต่งสถานะคุณสมบัติที่แสดงถึงสถานะ:
ข้อผิดพลาด var = ข้อผิดพลาดใหม่ ('หน้าที่คุณเข้าชมไม่มีอยู่'); error.status = 404;2.2 ข้อผิดพลาดของระบบ
ข้อผิดพลาดของระบบเป็นส่วนขยายของวัตถุข้อผิดพลาดข้อ Error พลาด JavaScript ซึ่งแสดงถึงข้อผิดพลาดในการดำเนินงานที่โปรแกรมสามารถจัดการได้และข้อความแสดงข้อผิดพลาดเหล่านี้ถูกสร้างขึ้นในระดับระบบ นอกเหนือจากแอตทริบิวต์ใน Error แตนซ์ข้อผิดพลาดอินสแตนซ์ของระบบข้อผิดพลาดยังมีแอตทริบิวต์ต่อไปนี้:
1. error.syscall - สตริงที่แสดงข้อมูลการโทรของระบบที่ล้มเหลว
2. error.errno - รหัสข้อผิดพลาดจำนวนเต็ม
3. error.code - หมายถึงสตริงข้อผิดพลาดโดยปกติจะเริ่มต้นด้วยตัวอักษรทุน E
3. การจับข้อยกเว้น
Node.js ใช้พื้นฐานการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์และแบบอะซิงโครนัสซึ่งหมายความว่า try / catch ไม่สามารถจับข้อผิดพลาดที่เกิดขึ้นได้เมื่อประมวลผลแบบอะซิงโครนัส สำหรับกรณีนี้เราสามารถใช้สองวิธีต่อไปนี้ในการจับหรือผ่านข้อผิดพลาด:
การจับข้อยกเว้นในฟังก์ชันการเรียกกลับ node.js
node.js มี API แบบอะซิงโครนัสจำนวนมากซึ่งจะถูกประมวลผลผ่านฟังก์ชั่นการโทรกลับ หากเกิดข้อผิดพลาดวัตถุ Error มักจะรวมอยู่ในพารามิเตอร์แรกของฟังก์ชัน callback หากไม่มีข้อผิดพลาดเกิดขึ้นพารามิเตอร์แรกจะเป็น null ชอบ:
const fs = require ('fs'); fs.readfile ('ไฟล์ที่ไม่มีอยู่จริง', (err, data) => {ถ้า (err) {console.error ('อ่านข้อผิดพลาดไฟล์', err); return;} // การประมวลผลอื่น ๆ });การจัดการข้อผิดพลาดตามเหตุการณ์
หากวัตถุเป็น EventEmitter ข้อผิดพลาดสามารถจับและจัดการผ่าน的'error' วัตถุ:
const net = ต้องการ ('net'); const connection = net.connect ('localhost'); // เพิ่มตัวจัดการเหตุการณ์ 'ข้อผิดพลาด' ไปยังสตรีม: การเชื่อมต่อ ('ข้อผิดพลาด', (err) => {// ถ้าการเชื่อมต่อถูกรีเซ็ตโดยเซิร์ฟเวอร์หรือไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่ระบุสรุป
ข้างต้นเป็นบทสรุปของข้อผิดพลาดบางประเภทใน node.js หากคุณสามารถเข้าใจประเภทข้อผิดพลาดใน node.js คุณสามารถช่วยเราจัดการกับข้อผิดพลาดและการจับข้อยกเว้นได้ดีขึ้น ฉันหวังว่าเนื้อหาของบทความนี้จะเป็นประโยชน์กับทุกคน