节点JS不显示我的数据到模板

我正在查询来自Yelp API的一些数据。 terminal的业务Console.log工作正常,但是当我调用相同的variables在模板中呈现,没有任何显示。

/* GET home page. */ router.get('/', function(req, res) { res.render('index', { title: 'Express' }); }); /*GET Hello World page. */ router.get('/helloworld', function(req, res){ var first; yelp.search({location: "tempe", term: "sandwiches", category_filter: "food"}, function(error, data) { var test = JSON.stringify(data); //Changes yelps response to JSON Objects with double quotes test = JSON.parse(test); //JSON.parse can now parse correctly after stringify is used. // for(var i = 0; i < 9; i++){ // console.log(test['businesses'][i]['name']); // // console.log(test['businesses'][i]); // } console.log(test['businesses'][0]['name']); first = test['businesses'][0]['name']; }); res.render('helloworld', { title: 'Hello, World', name: first }); }); module.exports = router; 

yelp.search是asynchronous的。 您必须在callback中调用res.render ,如:

 yelp.search({location: "tempe", term: "sandwiches", category_filter: "food"}, function(error, data) { var test = JSON.stringify(data); //Changes yelps response to JSON Objects with double quotes test = JSON.parse(test); //JSON.parse can now parse correctly after stringify is used. // for(var i = 0; i < 9; i++){ // console.log(test['businesses'][i]['name']); // // console.log(test['businesses'][i]); // } console.log(test['businesses'][0]['name']); first = test['businesses'][0]['name']; res.render('helloworld', { title: 'Hello, World', name: first }); }); 

,否则在yelp.search返回之前会调用它。

这是asynchronouscallback。 当yelp.search执行,callback仍然不可执行, name是未定义的。 所以你的渲染{name:'undefined'}。 除了@Rodrigo Medeiros的方式,你也可以使用一些模块来解决。 例如: qasnycbluebird等。