Lỗi và mã thoát
Thuộc phần Kiến thức cơ bản về Node.js trong hành trình Node.js của Coddy. Bài học 5 trên 33.
Khi một lệnh gặp lỗi, người dùng terminal cần biết lý do, và mọi chương trình chạy chương trình của bạn cũng cần biết chương trình đó đã thất bại.
Một chương trình có hai luồng đầu ra: stdout cho kết quả và stderr cho lỗi, được ghi bằng console.error. Khi kết thúc, chương trình trả về một mã thoát: 0 nghĩa là chương trình chạy thành công, mọi giá trị khác đều có nghĩa là chương trình thất bại. process.exit(1) dừng chương trình ngay lập tức với mã 1.
// node divide.js 6 0
const [a, b] = process.argv.slice(2).map(Number);
if (b === 0) {
console.error('Cannot divide by zero');
process.exit(1);
}
console.log(a / b);Terminal bên cạnh code của bạn hiển thị stderr màu đỏ và in mã thoát khi mã đó khác 0.
Thử thách
DễKhi có người dùng công cụ của bạn không đúng cách, công cụ cần cho họ biết cách sử dụng và báo cho terminal biết thao tác đã thất bại. Chương trình làm việc này bằng luồng lỗi, stderr, và mã thoát.
- Trong
notes.js, thay đổi nhánhelsecuối cùng, nhánh in raUnknown command:. Lỗi được gửi đến stderr, vì vậy hãy in chúng bằngconsole.errorthay vìconsole.log. - Khi có người nhập một lệnh nhưng lệnh đó không xác định, hãy in hai dòng sau ra stderr theo thứ tự này:Dòng đầu tiên cho biết từ đã được nhập: ở đây là
Unknown command: remove Usage: node notes.js <command> [words]remove, từnode notes.js remove 3. Dòng thứ hai luôn giống nhau. Hãy sao chép nguyên văn dòng này, giữ nguyên<command>và[words]: chúng là một phần của văn bản, không phải chỗ cần điền. - Khi không có gì được nhập sau
node notes.js, chỉ in dòng hướng dẫn sử dụng ra stderr. Không inUnknown command: undefined. - Trong cả hai trường hợp, kết thúc chương trình với mã thoát 1, nghĩa là “chương trình đã thất bại”.
addvàlistvẫn hoạt động như trước.node notes.js add Buy milkvẫn in raAdding: Buy milkvà kết thúc với mã thoát 0.
Thử nhé: nhấn Chạy khi ô sau $ node notes.js đang trống. Bạn sẽ thấy dòng hướng dẫn sử dụng màu đỏ, và terminal hiển thị mã thoát 1. Sau đó nhập remove 3 rồi nhấn Enter: bạn sẽ thấy Unknown command: remove và dòng hướng dẫn sử dụng, cả hai đều màu đỏ, cùng mã thoát 1. Tiếp theo, nhập add Buy milk: bạn sẽ thấy Adding: Buy milk với màu bình thường, và không có mã thoát, vì terminal ẩn mã 0.
Tự làm thử
// Công cụ ghi chú của bạn bắt đầu từ đây.
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');
if (command === 'add') {
console.log(`Adding: ${text}`);
} else if (command === 'list') {
console.log('No notes yet');
} else {
console.log(`Unknown command: ${command}`);
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản về Node.js
1Chạy JavaScript trên Node
Xin chào, NodeĐọc lệnhĐối số dòng lệnhCác lệnhTự luyện tập: Playground Express