2017-06-26 1 views
1

J'ai une méthode de route pour retourner une liste de noms de fichiers dans une réponse http.Express et JS: tableau retourné vide, rempli en retard

La structure de données que j'utilise pour la réponse est éventuellement remplie, bien que la réponse soit retournée, ce qui signifie que j'obtiens une réponse vide et inutile.

Je peux voir que la structure de données est remplie à la fin, comme la sortie du contenu du journal.

code:

app.get('/hello',function(req,res){ 

    var paths = {}; 

    fs.readdir('./uploads', function(err, items) { 
    console.log(items); 

    for (var i=0; i<items.length; i++) { 
     paths[i] = items[i]; 
     console.log(items[i]); 
    } 
    }); 

    res.json(this,paths); 
}); 
+0

Voulez-vous dire que la question est que 'res.json (this.paths)' renvoie une réponse JSON vide? – Valilutzik

Répondre

0

il suffit de déplacer l'appel res.json() à l'intérieur du rappel, après la boucle for.

EDIT1:

app.get('/hello', function (req, res) { 

    var paths = []; 

    fs.readdir('./uploads', function (err, items) { 

     console.log(items); 

     for (var i=0; i<items.length; i++) { 
      paths.push(items[i]); 
      console.log(items[i]); 
     } 

     res.json(paths); 
    }); 
}); 
+0

En outre, si l'objet 'paths' va avoir des clés numériques, alors aussi bien en faire un tableau. Dans ce cas, vous n'avez pas besoin d'utiliser la boucle 'for' pour remplir le tableau, sauf si vous avez d'autres opérations à effectuer sur chaque élément. – SarathMS

2

Vous devez retourner la réponse après avoir lu le répertoire de fichiers à l'intérieur du rappel.

est Ci-dessous l'extrait de code pour le même:

app.get('/hello',function(req,res){ 
    var paths = {}; 
    fs.readdir('./uploads', function(err, items) { 
     console.log(items); 
     for (var i=0; i<items.length; i++) { 
      paths[i] = items[i]; 
      console.log(items[i]); 
     } 
     res.json(paths); 
    }); 
});