TypeError:notes.push不是函数

时间:2019-05-28 15:34:39

标签: node.js

我正在运行一个简单的代码,如下所示。

基本上,我想读取'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);

请帮助。

2 个答案:

答案 0 :(得分:3)

您的json文件应具有一个数组。这是您尝试在repl网站上运行的工作代码。 JSON Parse之后,您的变量需要是一个数组,因此可以在其上使用push方法。

我还发现了另一个错误,您应该保存note而不是将notes保存到您的json文件中。因为您将再次在对象上覆盖文件,并且将导致应用再次崩溃。 在下面的行中使用。

fs.writeFileSync('playground/notes-data.json', JSON.stringify(notes));

Sample Code

答案 1 :(得分:2)

我认为您应该让我们看看./playground/notes-data.json是什么样的。

如果json文件不是数组,那么您很可能无法将任何内容压入其中。