Menu
CoddyTech

Menangani error

Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 16 dari 33.

File notes.json yang diedit secara manual bisa rusak. Setelah itu, JSON.parse akan menghasilkan error, dan Node mencetak stack trace: daftar panjang baris kode yang menyebabkan error.

try menjalankan kode yang mungkin menghasilkan error. Saat terjadi error, catch menerima error tersebut dan programmu menentukan apa yang akan dikatakan. err.message berisi alasan dalam satu baris.

let config;
try {
    config = JSON.parse('{ port: 3000 }');
} catch (err) {
    console.error(`config is broken: ${err.message}`);
    process.exit(1);
}

Jangan tangkap error lalu lanjutkan dengan list kosong: add berikutnya akan menyimpan data di atas file yang rusak itu, dan semua catatan di dalamnya akan hilang.

challenge icon

Tantangan

Mudah

Seseorang mengedit notes.json secara manual dan meninggalkan satu koma berlebih. Sekarang JSON.parse menghasilkan error, dan Node mencetak pelacakan tumpukan yang panjang. Buat alat ini mencetak satu baris yang jelas, lalu berhenti, agar tidak pernah menyimpan apa pun di atas file yang rusak.

  1. Di store.js, cari tempat catatan dimuat: JSON.parse(readFileSync(...)), di dalam objek store. Tangkap error yang dihasilkan JSON.parse saat file bukan JSON yang valid. try tidak bisa diletakkan di dalam objek, jadi pindahkan pemuatan ke fungsi atau variabel di atas objek, lalu gunakan hasilnya untuk notes.
  2. Saat penguraian gagal, cetak satu baris ke stderr, lalu keluar dengan kode 1. Baris itu dimulai dengan notes.json is damaged: dan dilanjutkan dengan pesan error, yaitu alasan yang diberikan JSON.parse, seperti Unexpected token ']'. Jangan cetak pelacakan tumpukan. Jangan lanjut dengan list kosong: perintah add berikutnya akan menyimpan data di atas catatan yang rusak.
  3. Jika notes.json tidak ada, hasilnya tetap berupa penyimpanan kosong, seperti sebelumnya. Pemeriksaan ini dijalankan untuk setiap perintah, karena setiap perintah memuat penyimpanan.

Coba: ketik list di kotak setelah $ node notes.js sebelum mengubah apa pun. Kamu akan melihat pelacakan tumpukan berwarna merah. Setelah perubahanmu, list hanya mencetak baris merah notes.json is damaged: ... dan kode keluar 1. Untuk melihat catatanmu lagi, hapus koma setelah "Call Ada" di notes.json, lalu jalankan list. Kemudian tambahkan kembali koma itu sebelum menekan tombol “Periksa”: pemeriksaan memerlukan file yang rusak, dan Atur ulang file tidak membatalkan perubahan yang kamu buat sendiri.

Coba sendiri

import { existsSync, readFileSync, writeFileSync } from 'node:fs';

const file = 'notes.json';

const store = {
    notes: existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : [],
    save() {
        writeFileSync(file, JSON.stringify(this.notes, null, 2));
    },
    add(text) {
        this.notes.push(text);
        this.save();
        return this.notes.length;
    },
    remove(n) {
        const [text] = this.notes.splice(n - 1, 1);
        this.save();
        return text;
    },
};

export default store;

Semua pelajaran di Dasar-Dasar Node.js

Latihan sendiri: Playground Express