2016-10-01 2 views
0

基本的には、私は'ul'に表示したい画像を持っているので、他のフォルダを保持するフォルダがあります。問題は私がreaddirを使用しているからです。asyncです。どうすれば"書き込み後に.end()エラー"が出ることなく、responseを書くことができます。ここに私のコードのように見えます。フォルダ内のフォルダからファイルを読み取る

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

UPDATEのように:あなたの更新されたコードを見た後、

module.exports = function(req, res) { 

doesntのは理にかなって、それが必要〜のようになる

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

Ok。これはルート内でこの非同期関数を呼び出さないためである必要がありますか?あなたの関数(req、res)はどこですか?あなたの周辺のコードをもっと見せて、見てください。 –

+0

私の質問を編集しました。私の.jsファイルにすべてのコードを入れました –

関連する問題