Básicamente, estoy trabajando en este proyecto para frontendmentor y quería ir un poco más allá y hacer que esto muestre las tareas almacenadas y agregue otras nuevas.
// JSON.data [ { "name": "task1", "todo": "Complete online Javascript course" }, { "name": "task2", "todo": "Jog around the park 3x" } ] // Script getData = () => { const xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status ==200) { const myData = JSON.parse(this.responseText) dataUse(myData) saveData(myData) } } xhttp.open("GET", "data.json", true); xhttp.send(); } dataUse = (object) =>{ object.forEach((datas)=>{ const todo = document.createElement('div') todos.appendChild(todo) const input = document.createElement('input') input.setAttribute('type', 'checkbox') input.setAttribute('id', datas.name) input.setAttribute('class', 'checks') todo.appendChild(input) const label = document.createElement('label') label.setAttribute('for', datas.name) label.setAttribute('class', `${datas.name} tasks`) todo.appendChild(label) const span = document.createElement('span') label.appendChild(span) const paragraph = document.createElement('p') paragraph.innerHTML = datas.todo label.appendChild(paragraph) }) } getData()Actualmente, el código anterior carga los datos y luego procede a crear el elemento necesario y coloca la información en el lugar correcto.
Lo que necesito ahora es hacerlo para que guarde un nuevo objeto en el archivo JSON (cuando la entrada tiene un valor (creo que puedo calcular esta parte yo mismo)) automáticamente y luego procede a mostrarlo como lo hace la función dataUse. Esto es lo que traté de hacer:
let newData = { name: "task3", todo: "Water the plants" } const fs = require('fs') const saveData = (object) =>{ const finished = (error)=>{ if(error){ console.error(error); return } } object.push(newData) const jsonData = JSON.stringify(object, null, 2) fs.writeFile('data.json', jsonData, finished) }Esto no parece funcionar, pero cuando trato de presionar newData sin intentar volver a escribir el archivo y console.log, muestra todos los objetos, incluido el nuevo. Entonces, ¿cómo hago que esto funcione? o hay una mejor manera de hacer esto?
Creo que lo que estás buscando es fs.appendFile
fs.appendFile("data.json", jsonData, finished);Tengo un repositorio que usa este formato general como referencia: https://github.com/cireneirbo/iCanRead-iCanWrite-imFS/blob/main/main.js