2017-09-14 57 views
-1

這是我的路由器的JS代碼,我正在使用帕格運行Node Express服務器。無法訪問帕格數據陣列中的元素

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; 

這是「)res.on(」我的帕格文件被渲染

p Welcome to #{title} 

中的執行console.log工作完全正常,並顯示JSON包我所期待的。當我在res.render()中調用這個數組時,例如title:'data [0] .name'會引發一個未定義的錯誤。

+0

您在數據填充之前調用'render'。 –

+0

你知道所有這些都是異步的嗎?您在調用'res.render'時'data'將爲空。 – Zeta

+1

[我如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Rajesh

回答

0

將您res.render進入該地區,其中data實際上填充:

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路由中。 –