2017-01-08 23 views
0

我一直在用这个拉我的头发,试图让我最新的推文作为一个数组与https://github.com/noffle/latest-tweets npm模块。然而,无论我如何命令它,我都会遇到某种形式的错误。主要是帖子未定义 或鸣叫未定义。Node.js,'X'没有定义

var express = require('express'); 
 
var latestTweets = require('latest-tweets') 
 
var Post = require('../models/blog'); 
 
var router = express.Router(); 
 

 

 
router.get('/', function (req, res) { 
 
\t Post.getPosts((err, posts) => { 
 
\t \t if(err){ 
 
\t \t \t throw err; 
 
\t \t } 
 
\t }); 
 
\t latestTweets('my_twitter_id', function (err, tweets) { 
 
    \t console.log(tweets) 
 
\t }) 
 
    res.render('index', {tweets : tweets, posts : posts}); 
 

 
});

我也试图出口latestTweets函数转换成一个辅助类,这导致更多的问题。

回答

0

在编写代码时,您应该注意变量的范围poststweets变量只能在其作为参数传递的回调函数内部访问,但您在范围之外访问它们。显然,由于参数tweetslatestTweets的回调中传递,所以变量tweets具有局限于回调的范围。因此,当程序到达res.render时,它会尝试评估tweetsposts,并且无法识别它们,并返回not defined

function myFunc(){ 
    var x = 0; 
} 
console.log(x); 

上述函数将返回相同的错误x is not defined,因为外部代码不知道什么x是。功能myFunc位于本地,只能在其内部访问。为了使其可访问,您必须将其设置为全局,即在主代码中声明var x = 0
在您的代码中,您可以做的最好是在router.get函数的回调(即全局回调函数)内声明两个变量,并将它们分配到poststweets各自的回调函数中。

router.get('/', function (req, res) { 
var tweets, posts; 
Post.getPosts((err, posts) => { 
    if(err){ 
     throw err; 
    } 
    posts = posts; 
}); 
latestTweets('my_twitter_id', function (err, tweets) { 
console.log(tweets) 
tweets = tweets; 
}) 
res.render('index', {tweets : tweets, posts : posts}); 

}); 

使用sessions比声明变量,而写,因为很多原因,这将是题外话在这里解释的后端,是更好的选择。

,避免使用嵌套的回调。在这种情况下,在为全局变量tweetsposts分配一个值之前可能会调用res.render,该值将再次抛出错误,表示tweetspostsundefined。在这种情况下,请使用Javascript的Promises这是该语言自己的功能来处理此类请求。

1

帖子和推文都是来自回调的变量。 你不能在回调之外使用它们。

快速修复:

router.get('/', function (req, res) { 
    Post.getPosts((err, posts) => { 
     if(err){ throw err; } 

     latestTweets('my_twitter_id', function (err_, tweets) { 
      if(err_){ throw err_; } 
      console.log(tweets); 

      res.render('index', {tweets : tweets, posts : posts}); 
     }); 
    }); 
}); 

现在,如果你正在寻找一个更漂亮的解决方案,您可以看看异步模块。 async repo

+1

谢谢,我跑你上面的修复,减去错别字:但是,它只是返回一个空的数组。 ive已成功将数组解析到控制台日志中,但未尝试其他尝试,但从未到达我的路由。我会及时看看你所取得的链接 –

+1

愚蠢我没有改变用户名到我正确的叽叽喳喳ID。这导致了空阵列。 –

相关问题