最初のNode/Expressアプリケーション。ExpressルータでGET要求の結果を使用
エンドポイントからデータを取得してブラウザにレンダリングする方法について私の頭が悩まされています。今までは
const http = require('http');
getFinhockeyData = function() {
http.get('http://tilastopalvelu.fi/ih/modules/mod_standings/helper/standings.php?statgroupid=3545', (res) => {
console.log(`Got response: ${res.statusCode}`);
var body = "";
res.on('data', function (chunk) {
body += chunk;
})
res.on('end', function() {
var data = JSON.parse(body);
console.log('data parsed.');
console.log('first team name: ' + data.teams[0].TeamName);
console.log(typeof data);
return data;
})
}).on('error', (e) => {
console.log(`Got error from Finhockey: ${e.message}`);
});
}
module.exports.getFinhockeyData = getFinhockeyData;
物事が仕事とdata
オブジェクトがconsole.loggedすることができ、その内容が使用可能である:
router.jsは現在、次のようになります。
'use strict';
const express = require('express');
const async = require('async');
const router = express.Router();
const dataservice = require('./dataservice.js')
router.get('/', function(req, res) {
async.series([
function(callback) {
getFinhockeyData(callback)
}
],
function(err, results) {
console.log('start rendering');
res.render('index', { data: data });
})
});
module.exports = router;
私はアプリを実行して、/ルートを更新すると、私はgetFinhockeyData
が呼び出され、データオブジェクトの内容はで利用可能ですコンソールから見ることができますdataservice.jsのconsole.logsが表示されますが、ブラウザウィンドウがハングし、res.render
部分には決して行きません。
レンダリングは、エンドポイントデータリクエストが完了した後でなければならないことを理解していますが(async.seriesの使用法)、getFinhockeyData関数の結果データを実際にどのように使用するかに関する基本的な理解が不足しているようです主要ルート。
これに関するアドバイスはありますか?必要に応じてより多くの情報を提供しています。
これは動作しているようです。どうもありがとう!私は今Pugのテンプレートと格闘に移ります。 –