我正在运行一个简单的代码,如下所示。
基本上,我想读取'notes-data.json'中已经存在的数据,然后附加它。
node notes.js
console.log('Starting notes.js');
const fs = require('fs');
var addNote = (title, body) => {
var notesString = fs.readFileSync('playground/notes-data.json');
var notes;
notes = JSON.parse(notesString);
var note = {
title,
body
};
notes.push(note);
fs.writeFileSync('playground/notes-data.json', JSON.stringify(note));
};
addNote("Hi", "There");
module.exports = {
addNote: addNote
};
预期:当我运行此程序时,必须添加“ Hi There”。
实际:出现以下错误。
(base) prakashp:newproject2 prakashp$ node notes.js
Starting notes.js
/Users/prakashp/training/nodejs/practise/newproject2/notes.js:13
notes.push(note);
^
TypeError: notes.push is not a function
at addNote (/Users/prakashp/training/nodejs/practise/newproject2/notes.js:13:11)
at Object.<anonymous> (/Users/prakashp/training/nodejs/practise/newproject2/notes.js:18:1)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
at executeUserCode (internal/bootstrap/node.js:499:15)
at startMainThreadExecution (internal/bootstrap/node.js:436:3)
如果我评论以下内容,则不会出现任何错误。
notes = JSON.parse(notesString);
请帮助。
答案 0 :(得分:3)
您的json文件应具有一个数组。这是您尝试在repl
网站上运行的工作代码。 JSON Parse之后,您的变量需要是一个数组,因此可以在其上使用push
方法。
我还发现了另一个错误,您应该保存note
而不是将notes
保存到您的json文件中。因为您将再次在对象上覆盖文件,并且将导致应用再次崩溃。
在下面的行中使用。
fs.writeFileSync('playground/notes-data.json', JSON.stringify(notes));
答案 1 :(得分:2)
我认为您应该让我们看看./playground/notes-data.json是什么样的。
如果json文件不是数组,那么您很可能无法将任何内容压入其中。