Файл JSON пуст после двойной записи в него в приложении nodejs

#javascript #node.js #json #electron

#javascript #node.js #json #электрон

Вопрос:

Создание простой программы для создания заметок, в которой вы добавляете заметки, и они сохраняются в файле JSON, но всякий раз, когда я пишу 2 заметки, файл JSON полностью очищается. Это не проблема, когда я просто выполняю скрипт, используя $ node notes.js для тестирования функций, только когда я вызываю его из приложения npm.

notes.js

 const fs = require("fs"); 
let rawdata = fs.readFileSync('notedb.json');
let notes = JSON.parse(rawdata);

// takes in note, adds it to database
function addnote(note) {
    // format item to prepare for json
    var jsonitem = {
        "note": note
    };

    // add item to the end of json file
    notes.push(jsonitem);

    // write the item
    fs.writeFile("notedb.json", JSON.stringify(notes), err => {
        if (err) console.log("error");
    });

    // reload the notes on the website
    shownotes();
}

function shownotes() {
    // put notes into string
    var notestostring;
    for (i = 0; i < notes.length; i  ) {
        notestostring = notes[i]["note"]
    }
    
    // add to document
    document.getElementById("note-ul").innerHTML = notestostring;
}
  

notes.html

 <!DOCTYPE html>

<script type="text/javascript" src="notes.js">

<!-- input with script that makes it submit when enter key is hit -->
<input type="text" onkeydown="add(this);" id="note-input">
<script>
   function add(ele) {
       if (event.keyCode == 13) {
           addnote(ele.value);
           var form = document.getElementById("note-input");
       }
   }
</script>
  

Я добавлю первую заметку, и она будет добавлена в файл JSON без проблем, затем добавлю вторую заметку, и весь файл будет пуст

(Примечание: я сократил до кода, чтобы просто включить важные элементы, игнорировать синтаксические ошибки)

Комментарии:

1. Для чего вы используете fs в браузере?

2. Извините, я не использую браузер, я использую npm и electron ( $ npm start ) для запуска программы

3. Вы получаете какие-либо ошибки? Вместо console.log('error') do console.log(err) .

Ответ №1:

В конечном итоге проблема была устранена и вместо этого использовался файл CSV в качестве хранилища. Я думаю, что это как-то связано с асинхронной записью / синтаксическим анализом, но поскольку я относительно новичок в javascript, я не уверен, как работает асинхронная обработка.

Комментарии:

1. Возникла та же проблема с записью и чтением одного и того же файла в одном и том же скрипте. Только использовал json в качестве временного носителя перед интеграцией с SQL, так что ничего страшного.