获取未定义的函数调用Express渲染()

我是Node和Express的新手,并且遇到从一个函数获取数据时遇到问题,并将其作为var传递给另一个函数。 我认为这是因为我没有正确处理callback和asynchronous的东西,但会很感激。

代码应该有希望解释。 我试图从URL中检索一些JSON数据,并将其传递给router.get函数的render()方法。 然而,没有什么(“未定义”)被发送。 当我单独运行getData()函数时,它会返回正确的数据,如上所述,我认为这是因为我没有正确处理asynchronous的东西。

function getData(cid){ var request = require("request"); var cid ='XXXXXX' // hard code temp var baseUrl = "someurl.com" var apiKey = "XXXXXX" var cUrl = baseUrl+cid+'?api_key='+apiKey request({ url: cUrl, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { console.log(body._embedded.assets); //Print the json response return body._embedded.assets } }); } /* GET home page. */ router.get('/', function(req, res) { var LiveCards = getData() var cID = (req.query.cID ? req.query.cID : '14d115ff-1db7-4a6f-8648-ea64bc1a6597') var limit = Number(req.query.limit) res.render('index', { title: 'Cards', cards: LiveCards.slice(0,limit), <--- returning undefined at the moment limit: limit, activateSharetools: activateSharetools, cID: cID, cardsHeader: req.query.cardsHeader, }); }); 

任何指导赞赏。

请求是asynchronous函数,您需要在完成请求后添加callback来获取Data并执行它,如下所示:

 function getData (cid, callback) { var request = require("request"); var cid = 'XXXXXX'; var baseUrl = "someurl.com"; var apiKey = "XXXXXX"; var cUrl = baseUrl + cid + '?api_key=' + apiKey request({url: cUrl, json: true}, callback); } router.get('/', function (req, res) { var cID = req.query.cID ? req.query.cID : '14d115ff-1db7-4a6f-8648-ea64bc1a6597'); var limit = Number(req.query.limit); getData(cID, function (error, response, body) { if (!error && response.statusCode === 200) { res.render('index', { title: 'Cards', cards: body._embedded.assets.slice(0, limit), <--- returning undefined at the moment limit: limit, activateSharetools: activateSharetools, cID: cID, cardsHeader: req.query.cardsHeader, }); } else { throw error; } }); });