Como ya revela mi pregunta, estoy tratando de guardar las entradas de un formulario HTML en un archivo json. Sin embargo, solo puedo guardar las entradas en el almacenamiento local.
let movies = []; const addMovie = (ev)=>{ ev.preventDefault(); let movie = { id: Date.now(), title: document.getElementById('title').value, year: document.getElementById('yr').value } movies.push(movie); document.querySelector('form').reset(); //saving to localStorage localStorage.setItem('key', JSON.stringify(movies) ); } document.addEventListener('DOMContentLoaded', ()=>{ document.getElementById('btn').addEventListener('click', addMovie); });Ahora, ya probé los métodos fs.writeFile pero de alguna manera mi PC no quiere importar fs. Entonces, pregunto si hay otra forma de escribir las entradas en JSON o cómo corregir el error de importación de fs.
En un navegador web, puede invocar la descarga de varias maneras. Una de las posibilidades es window.open una ventana, redirigir o crear un enlace e invocar su método de clic.
const jsonToDownload = '{"foo":42}' function download() { const aElem = document.createElement("A") aElem.href = 'data:application/octet-stream,' + jsonToDownload aElem.download = 'filename.json' aElem.click() } <button onclick=download()>Download</button> Puede utilizar cualquier nombre de archivo. Simplemente configure el atributo de download en el enlace al nombre del archivo.
Si desea descargar datos binarios o grandes, usar el objeto BLOB podría ser una mejor idea. Es bastante simple: cree el BLOB, genere su URL, inicie la descarga y revoque la URL del BLOB.
const jsonToDownload = '{"foo":42}' function download() { const blob = new Blob([jsonToDownload, ], { type: 'application/json', }) const url = URL.createObjectURL(blob) const aElem = document.createElement("A") aElem.href = 'data:application/octet-stream,' + jsonToDownload aElem.download = 'a' aElem.click() URL.revokeObjectURL(url) } <button onclick=download()>Download</button>Tenga en cuenta que el fragmento anterior probablemente no funcione, porque el uso de iframe de StackOverflow prohíbe este comportamiento en algunos navegadores. Copie el código en su propio archivo HTML y pruébelo allí.