写入文件
本课属于 Coddy Node.js 学习旅程的“Node.js 基础”单元。第 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 的数组。直接传入数组会导致错误,因为文件中存放的是文本。
挑战
简单这一步会打开课程中准备好的笔记命令行工具项目,而不是你在读取文件课中的项目文件(包括 store.js)。之前的练习仍保留在原来的课中。编辑 store.js 前,先阅读提供的文件。这个副本包含一个可读取文件的笔记工具。
程序结束后,add 仍会忘记这条笔记。让它把每条笔记都保存到 notes.json,这样下次运行时,list 就会显示这条笔记。
- 在
store.js中,add将新笔记放入数组后,把整个数组作为 JSON 写回notes.json。写入每条笔记,而不只是新笔记:写入文件会替换文件中的所有内容。将 JSON 缩进设为两个空格,这样在 Files 中更容易阅读。 - 在
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.,然后运行list会显示1. Call Ada。
试试看:在 $ node notes.js 后面的输入框中输入 add Buy bread,然后按 Enter。你会看到 Saved note 3.。输入 list:即使这是一次新的运行,Buy bread 现在也是第 3 条笔记。在 Files 中打开 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 基础中的所有课
自己练习: Express 在线编辑器