2017-06-26 29 views
1

我有一個路由方法返回http響應中的文件名列表。Express&JS:數組返回空,填充較晚

我用於響應的數據結構最終會被填充,雖然在返回響應之後,這意味着我得到一個空的和無用的響應。

我可以看到數據結構是填充到最後,作爲輸出內容到日誌顯示。

代碼:

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

你的意思是,問題是,'res.json(this.paths)'返回一個空的JSON響應? – Valilutzik

回答

0

只需推動res.json()調用回調裏面,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

另外,如果'paths'對象將要有數字鍵,那麼也可以使它成爲一個數組。在這種情況下,除非對每個項目執行其他操作,否則不必使用'for'循環來填充數組。 – SarathMS

2

你應該閱讀回調裏面的文件目錄後返回響應。

下面是相同的代碼片段:

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); 
    }); 
});