これは私のルーターの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'でこの配列を呼び出すと、定義されていないエラーがスローされます。
'data'のデータが入力される前に' render'を呼び出しています。 –
これはすべて非同期であることに気づいていますか? 'res.render'を呼ぶときに' data'は空になります。 – Zeta
[非同期呼び出しから応答を返すにはどうすればいいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Rajesh