2016-10-01 229 views
0

因此,基本上我有一個文件夾,其中包含其他文件夾,每個文件夾都有自己的一組圖像,我想在'ul'中顯示。問題是因爲我使用的是readdir,這是async,我該如何編寫response,而沒有得到「在.end()之後寫入錯誤」。這是我的代碼的樣子。從文件夾內的文件夾讀取文件

var fs = require('fs'), 
    url = require('url'); 

module.exports = function(req, res) { 
    req.pathName = req.pathName || url.parse(req.url).pathname; 

    if(req.pathName === '/gallery') { 
     fs.readdir('./content/images/public', function(err, filenames) { 
      if (err) { 
       console.log(err); 
       return; 
      } 

      if(filenames.length) { 
       var list_content = ''; 

       for (var i = 0; i < filenames.length; i++) { 
        fs.readdir('./content/images/public/' + filenames[i], function(err, images) { 
         if (err) { 
          console.log(err); 
          return; 
         } 

         for (var i = 0; i < images.length; i++) { 
          list_content += '<li><a href="/gallery/details/'+ i +'">' + images[i] + '</a></li>'; 
         } 

         var list = '<ul>' + list_content + '</ul><a href="/">Go back to homepage</a>'; 

         res.writeHead(200, { 
          'Content-Type': 'text/html' 
         }); 
         res.send(list); 
        }); 
       } 
      } else { 
       res.writeHead(200, { 
        'Content-Type': 'text/html' 
       }); 
       res.write('<p>There are no images in the gallery</p><a href="/">Go back to homepage</a>'); 
       res.end(); 
      } 
     }); 
    } else { 
     return true; 
    } 
} 
        res.end(); 
       } 
      }); 

回答

0

而不是使用res.write()和res.end(),請嘗試使用res.send(),這樣對於你做的。更新:另外,請確保此代碼位於請求回調中,其中req和res對象正確解析。

for (var i = 0; i < images.length; i++) { 
    list_content += '<li><a href="/gallery/details/'+ i +'">' + images[i] + '</a></li>'; 
    } 

    var list = '<ul>' + list_content + '</ul><a href="/">Go back to homepage</a>'; 

res.send(list); 

然後在前端,接收它在Ajax響應回調,像

$.post('xxxx', function(response){ 
     alert(response); //list 
}); 

更新:看到你更新的代碼後,

module.exports = function(req, res) { 

沒有道理,它需要就像

exports.functionName = function(req,res){ 

閱讀本

https://www.sitepoint.com/understanding-module-exports-exports-node-js/

module.exports是功能一個對象。不是一個功能。它看起來像這樣

module.exports = { 
    funcExample: function() { 
    return 2; 
    }, 

    funcOtherExample: function() { 
    return 1; 
    } 
+0

我得到一個錯誤,說「res.send()」不是函數 –

+0

好的。那一定是因爲你不在路由中調用這個異步函數?如果你的功能(請求,水庫)?請顯示更多的周邊代碼,並看看。 –

+0

我編輯了我的問題,把所有的代碼放在我的.js文件中 –