nodejs | obtener lista de archivos y directorios

Iniciado por patilanz, 9 Diciembre 2017, 21:06 PM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

Buenas,
con este codigo intento obtener un array con el formato: [name: 'nombre', type: 'dir o file',...]
Código (javascript) [Seleccionar]
function getFilesInFolder(realPath, callback){
fs.readdir(realPath, (err, files) => {
if(err)return callback(0);
if(!files.length)return callback([]);
var r = [];
for(var i =0;i<files.length;i++){
var f = files[i];
fs.stat(realPath + '/' + f, (err, stat) => {
if(err)return r.push(0);
var a = {name: f}; // Problema, la variable f cambia hasta el ultimo archivo
if(stat.isFile())a.type = 'file';
else if(stat.isDirectory())a.type = 'dir';
r.push(a);
if(r.length == files.length){
r.filter((e) => {return e;})
console.log('final R: ', r);
callback(r);
}
});
}
});
}


Tiene que ser asincrono. Entiendo el problema pero no se como solucionarlo.

Un saludo

patilanz

Lo resolví:
Código (javascript) [Seleccionar]
var fs = require('fs');
var path = require('path');

var dir = '../first';
fs.readdir(dir, (err, files) => {
var r = [];
files.forEach((file) => {
s(file);
function s(file){
fs.stat(dir + '/' + file, (err, stat) => {
if(err){console.error(err);return;}
if(stat.isDirectory())r.push({f:file, type: 'dir'});
else if(stat.isFile())r.push({f:file, type: 'file'});
else r.push(0);
if(r.length == files.length){
r.filter((m) => {return m;});
console.log(r);
}
});
}
});
});


Pero no creo que sea la mejor forma de hacerlo