Menu
CoddyTech

כתיבת קובץ

חלק מהיחידה יסודות Node.js במסלול ה-Node.js של Coddy. שיעור 14 מתוך 33.

add שוכחת את ההערה ברגע שהתוכנית מסתיימת.

writeFileSync(path, text) כותבת קובץ ומחליפה את כל התוכן שהיה בו. JSON.stringify הופכת מערך לטקסט JSON, ו-null, 2 מזיח אותו בשני רווחים כדי שיהיה נוח לקרוא אותו ב-Files.

import { writeFileSync } from 'node:fs';

const scores = [12, 40];
scores.push(31);
writeFileSync('scores.json', JSON.stringify(scores, null, 2));

הקובץ תמיד מקבל את המערך כולו: טוענים את ההערות, מוסיפים אחת וכותבים את כולן בחזרה. ב-store.js, add היא מתודה של האובייקט store. בתוך מתודה, this הוא האובייקט עצמו, לכן this.notes הוא המערך של המאגר. העברת המערך עצמו גורמת לשגיאה, כי קובץ מכיל טקסט.

challenge icon

אתגר

קל

השלב הזה פותח את פרויקט כלי שורת הפקודה לניהול פתקים שהוכן בקורס, ולא את קובצי הפרויקט שלך מתוך קריאת קובץ (כולל store.js). העבודה הקודמת שלך נשארת בשיעור משלה. קרא את הקבצים שסופקו לפני עריכת store.js. העותק הזה מכיל את כלי הפתקים שקורא קבצים.

add עדיין שוכחת את הפתק כשהתוכנית מסתיימת. שנה אותה כך שתשמור כל פתק ב-notes.json, כדי ש-list תציג אותו בהרצה הבאה.

  1. ב-store.js, אחרי ש-add מוסיפה את הפתק החדש למערך, כתוב את המערך כולו בחזרה ל-notes.json בפורמט JSON. כתוב כל פתק, לא רק את החדש: כתיבה לקובץ מחליפה את כל מה שהיה בו. הזח את ה-JSON בשני רווחים, כדי שיהיה קל לקרוא אותו ב-Files.
  2. ב-notes.js, בענף add, החלף את השורה שמדפיסה Adding: .... עכשיו היא מדפיסה רק את Saved note , את מספר הפתק החדש ונקודה. כששני הפתקים שבהם notes.json מתחיל קיימים, הפקודה node notes.js add Buy bread מדפיסה:
    Saved note 3.
    ואז notes.json מכיל:
    [
      "Buy milk",
      "Call Ada",
      "Buy bread"
    ]
  3. כשאין notes.json, הפקודה add יוצרת אותו. אחרי clear, הפקודה node notes.js add Call Ada מדפיסה Saved note 1., ואז list מציגה 1. Call Ada.

נסה זאת: הקלד add Buy bread בתיבה שאחרי $ node notes.js והקש Enter. תראה Saved note 3.. הקלד list: Buy bread הוא עכשיו פתק מספר 3, אף שזו הרצה חדשה. פתח את notes.json ב-Files כדי לראות את המערך שנשמר. לאחר מכן הקלד clear, שמוחקת את הקובץ, ואז add Call Ada: תראה Saved note 1..

נסו בעצמכם

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

const file = 'notes.json';

const store = {
    notes: existsSync(file) ? JSON.parse(readFileSync(file, 'utf8')) : [],
    add(text) {
        this.notes.push(text);
        return this.notes.length;
    },
};

export default store;

כל השיעורים ביחידה יסודות Node.js

תרגלו בעצמכם: Express אונליין