Menu
CoddyTech

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.

challenge icon

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.

  1. Trong notes.js, thay đổi nhánh else cuối cùng, nhánh in ra Unknown command:. Lỗi được gửi đến stderr, vì vậy hãy in chúng bằng console.error thay vì console.log.
  2. 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:
    Unknown command: remove
    Usage: node notes.js <command> [words]
    Dòng đầu tiên cho biết từ đã được nhập: ở đây là 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.
  3. 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 in Unknown command: undefined.
  4. 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”.
  5. add và list vẫn hoạt động như trước. node notes.js add Buy milk vẫn in ra Adding: Buy milk và 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}`);
}
quiz iconTự kiểm tra

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

Tự luyện tập: Playground Express