2016-04-13 5 views
4

私はエクスプローラーで使用するnode.jsサーバーを持っており、玉レンダリングに配列を渡そうとしています。翡翠レンダリングに配列を渡す

のNode.jsのコード:

router.get('/render', function(req, res) { 
    var t; 
    var combo = {'items': []}; 

    fs.readFile('ek.txt', function(err, data){ 
     if(err) { 
      return console.error("Error: " + err); 
     } 

     t = data.toString(); 

     combo.items = t.split(" "); 
     combo.items.pop(); //delete last element which is \r\n 
     console.log(combo.items); 
    }); 

    res.render('register', {'items': combo.items}, function(err, html) { 
     if(err) 
      console.log(err); 
     else 
      res.send(html); 
    }); 
}); 

そして、ここでは、ヒスイコードです:

select 
    -console.log(items); 
    each item in items 
     option= item 

これは、HTMLでの私の選択を取り込む必要がありますが、それは空です。

助けていただけたら幸いです!

+0

[node.jsのjadeテンプレートに配列を渡す際に問題が発生する](http://stackoverflow.com/questions/20294541/having-problems-with-passing-array-to-jade-template-in) -node-js) –

答えて

0

これは正しい方法ですが、問題はfs.readFileが非同期であることです。だから、ファイルがまだ読み込まれていないので、空の配列をレンダリングすることが起こります。

考えられる解決策:

fs.readFile('ek.txt', function(err, data){ 
    if(err) { 
     return console.error("Error: " + err); 
    } 

    t = data.toString(); 

    combo.items = t.split(" "); 
    combo.items.pop(); //delete last element which is \r\n 
    console.log(combo.items); 

    res.render('register', {'items': combo.items}, function(err, html) { 
     if(err) 
      console.log(err); 
     else 
      res.send(html); 
    }); 
}); 

またはその代わりのネスティング、あなたは約束を使用することができます。

関連する問題