كتابة ملف
جزء من قسم أساسيات 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 هي مصفوفة المتجر. ويؤدي تمرير المصفوفة نفسها إلى حدوث خطأ، لأن الملف يحتوي على نص.
التحدي
سهلتفتح هذه الخطوة مشروع أداة سطر الأوامر للملاحظات المُعدّة للدورة، بدلًا من ملفات مشروعك من قراءة ملف (بما فيها store.js). يبقى عملك السابق ضمن درسه الخاص. اقرأ الملفات المقدّمة قبل تعديل store.js. تحتوي هذه النسخة على أداة الملاحظات التي تقرأ الملفات.
ما زال add ينسى الملاحظة عند انتهاء البرنامج. اجعله يحفظ كل ملاحظة في notes.json، لكي يعرضها list عند التشغيل التالي.
- في
store.js، بعد أن يضيفaddالملاحظة الجديدة إلى المصفوفة، اكتب المصفوفة بأكملها مرة أخرى فيnotes.jsonبتنسيق JSON. اكتب كل الملاحظات، وليس الملاحظة الجديدة فقط: فالكتابة في ملف تستبدل كل ما كان فيه. اجعل مسافة بادئة في JSON بمقدار مسافتين، حتى يسهل قراءته في «الملفات». - في
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" ] - عندما لا يكون
notes.jsonموجودًا، ينشئهadd. بعد تنفيذclear، يطبعnode notes.js add Call AdaالرسالةSaved note 1.، ثم يعرضlist1. Call Ada.
جرّب ذلك: اكتب add Buy bread في المربع بعد $ node notes.js واضغط على Enter. ستظهر لك Saved note 3.. اكتب list: أصبحت Buy bread الملاحظة رقم 3، مع أن هذا تشغيل جديد. افتح notes.json في «الملفات» لرؤية المصفوفة المحفوظة. ثم اكتب 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
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامرتدرّب بنفسك: Playground لـ Express