Tengo una carpeta con 98 archivos .csv que necesito leer y guardar en una base de datos de Postgres. Estoy ejecutando este código:
// Files in folder const filesInFolder = fs.readdirSync('../pages-csv'); for (let i = 0; i < filesInFolder.length; i++) { console.log(`Saving file ${filesInFolder[i]}`) await fs.promises.readFile(path.join(__dirname, `../pages-csv/${filesInFolder[i]}`), 'utf8').then(async (data) => { await createOne(data) // database function }) }Pero conduce a este error:
ERROR FATAL: Marca-compactos ineficaces cerca del límite de almacenamiento dinámico Falló la asignación: almacenamiento dinámico de JavaScript sin memoria
Parece que los archivos no se cierran o no se borran de la memoria después de insertarlos en la base de datos.
¿Has probado a transmitirlo? Algo como:
var csv = require('csv-parser') var data = [] for (let i = 0; i < filesInFolder.length; i++) { console.log(`Saving file ${filesInFolder[i]}`) enter code here // add the 'file path here' fs.createReadStream(filesInFolder[i]) .pipe(csv()) .on('data', function (row) { createOne(row) }) .on('end', function () { console.log('End cvs') }) }O tal vez haya una forma de borrar la recolección de basura: global.gc(), después de exponerlo: node --expose_gc
Encontré el problema, era la función createOne , tenía un bucle forEach, lo eliminé y ¡ahora funciona!