• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

486
Views
Node Js: cómo leer y actualizar el archivo json

Hola, soy un programador nuevo, pero tengo problemas al intentar agregar un nuevo usuario (requerido) a un archivo json de usuarios que tengo para un banco falso. Estoy más confundido sobre el tipo de objeto que son y cómo acceder a ellos desde los datos. Agradecería cualquier palabra de consejo. Actualmente solo puedo agregar la nueva cuenta, pero reemplaza a los otros usuarios en el archivo. Así que ahora estoy tratando de agregar los usuarios antiguos y los nuevos antes de importar, pero no estoy seguro de cómo hacerlo. Mi área principal de confusión es cómo acceder y manipular los "datos" de fs.readfile

 app.post('/Account', (req, res,) => { var queryParameter = req.query; console.log(queryParameter.pin); console.log(queryParameter.firstName); console.log(queryParameter.lastName); console.log(queryParameter.Balance); console.log(queryParameter.email); const tempAccount = { pin: Number(queryParameter.pin), firstName: queryParameter.firstName.toString(), lastName: queryParameter.lastName.toString(), Balance: Number(queryParameter.Balance), email: queryParameter.email.toString() }; let content = []; var data2 = tempAccount;//JSON.stringify(tempAccount, null, 2);*/ const fileName = "Routes/Users.json"; let content2 = []; fs.readFile(fileName, 'utf8', function(err, data) { data = JSON.parse(data); content2.push(JSON.stringify(data)); }); content.push(content2); content.push(data2); fs.writeFile(fileName, content, (err) => { if (err) throw err; console.log('Data written to file'); }) res.send(data); }); Here is the json file: { "user": [ { "pin": "1234", "firstName": "Peter", "lastName": "Parker", "balance": "50", "email": "spider@avenger.com" }, { "pin": "5678", "firstName": "Steve", "lastName": "Rogers", "balance": "50", "email": "captain@avenger.com" }, { "pin": "4321", "firstName": "Tony", "lastName": "Stark", "balance": "1000", "email": "iron@avenger.com" } ] }
almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Este es el problema clave:

 let content2 = []; fs.readFile(fileName, 'utf8', function(err, data) { data = JSON.parse(data); content2.push(JSON.stringify(data)); }); content.push(content2); content.push(data2);

JSON es útil como formato de datos intercambiables, pero no es algo que desee manipular en su aplicación. Tan pronto como use JSON.stringify() , sus datos se convierten en una cadena . La única forma de manipularlo como datos regulares nuevamente es usar JSON.parse() .

Entonces, en su código, está analizando datos, pero dando la vuelta y encadenándolos como JSON nuevamente, y luego tratando de enviarlos a content2 . Suponiendo que no haya problemas asincrónicos (los hay, pero hablaremos de eso más adelante), content2 sería solo una matriz que contiene una sola cadena.

Dos cosas deben cambiar. Primero, debe esperar a que se carguen los datos del archivo antes de hacer cualquier otra cosa. Como @jarmod menciona en los comentarios, puede hacer esto usando una forma síncrona de readFile , pero es mejor hacer esto asíncrono para no congelar su aplicación mientras esperamos el archivo.

Código no probado, pero prueba algo como esto:

 import * as fs from 'fs/promises'; const dataFile = 'data.json'; function async loadData() { return JSON.parse( await fs.readFile(dataFile) ); } function async saveData(data) { await fs.writeFile( dataFile, JSON.stringify(data) ); }

Ahora, cuando quieras usar estas funciones, es un poco más fácil:

 app.post('/Account', async (req, res, next) => { const data = await loadData(); // ... do other things here ... // For example: // data.user.push({ firstName: 'Brad' }); await saveData(data); });

Tenga en cuenta que cambié este controlador/devolución de llamada Express para que sea async .

En el futuro, si realmente desea utilizar una base de datos local basada en archivos, consulte SQLite3. Es muy rápido y extremadamente fiable.

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error