2017-09-14 8 views
-1

これは私のルーターのJSコードです.PugでNode Expressサーバーを実行しています。Pugデータ配列の要素にアクセスできない

var express = require('express'); 
var router = express.Router(); 
var https = require('https'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    var url = 'https://data.police.uk/api/forces'; 
    var data = []; 

    https.get(url, function(res){ 
     var body = ''; 

     res.on('data', function(chunk){ 
      body += chunk; 
     }); 

     res.on('end', function(){ 
      var response = JSON.parse(body) 
      for (var i = 0; i< response.length; i++) 
       for (var id in response[i]) { 
        data[i] = response[i] 
       } 
      console.log(data[0].id); 
     }); 

    }).on('error', function(e){ 
     console.log("Error: ", e); 
    }) 

    res.render('map', { 
     title: 'data[0].id' 
    }); 
}); 

module.exports = router; 

そして、これがで

p Welcome to #{title} 

にconsole.logを描画する私のパグファイルである「(res.on)は、」完全に正常に動作し、私は期待していたJSONパッケージを示しています。 res.render()の配列、つまりtitle: 'data [0] .name'でこの配列を呼び出すと、定義されていないエラーがスローされます。

+0

'data'のデータが入力される前に' render'を呼び出しています。 –

+0

これはすべて非同期であることに気づいていますか? 'res.render'を呼ぶときに' data'は空になります。 – Zeta

+1

[非同期呼び出しから応答を返すにはどうすればいいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Rajesh

答えて

0
dataが実際に移入された領域にあなたの res.renderを移動

var express = require('express'); 
var router = express.Router(); 
var https = require('https'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    var url = 'https://data.police.uk/api/forces'; 
    var data = []; 

    https.get(url, function(res){ 
     var body = ''; 

     res.on('data', function(chunk){ 
      body += chunk; 
     }); 

     res.on('end', function(){ 
      var response = JSON.parse(body) 
      for (var i = 0; i< response.length; i++) 
       for (var id in response[i]) { 
        data[i] = response[i] 
       } 
      console.log(data[0].id); 
      res.render('map', { 
       title: 'data[0].id' 
      }); 
     }); 

    }).on('error', function(e){ 
     console.log("Error: ", e); 
    }) 

}); 

module.exports = router; 

それがどのように非同期コードまたはスコープ作品ではありません、どこにでも埋めていません。

+0

これを試してみると、接続が拒否されています。サーバーからの応答が空になりました。私が得ているエラーメッセージはres.renderは関数ではありません。 –

+0

@MichaelDepaye、これは別の問題のようです。 URLとは何ですか? – ryanpcmcquen

+0

localhost:3000、すべてのコードはindex.jsルートにあります。 –

関連する問題