获取twit npm包与meteor.js一起使用

时间:2015-08-10 18:10:28

标签: api http twitter meteor npm

我正在尝试使用twit npm包和流星来推送一些推文。我安装了meteorhacks:npm和http作为依赖项,但我仍然没有运气。这是我的代码:

/* server/lib/twitter-api.js */

Meteor.startup(function() {
  var Twit = Meteor.npmRequire('twit');

  Meteor.methods({
   'getStream': function() {
      var stream = T.stream('statuses/filter', { track: ['football']})
      stream.on('tweet', function (tweet) {
        console.log(tweet)
	   })
      }
  });
});



/* private/twitter.js */

var T = new Twit(config) {
	consumer_key: "xxxxxxxx",
	consumer_secret: "xxxxxxx",
	app_only_auth: true
}



/* client/views/twitter/twitter.js */
Template.tweets.helpers({
	'streams': function() {
		return Session.get("streams");
	}
});

Template.tweets.events({
  'streams': function () {
    Meteor.call("getStream", function(error, res) {
	  console.log(res);
	  Session.set("tweet", res)
     });
    }
});
<template name="tweets">
  <h1>Tweets</h1>
	{{ streams }}
</template>

我遇到的问题很少: 1)我的twit配置密钥是以正确的路径/正确格式存储的吗? 2)我的流星方法存储正确吗?在我收到错误之前说它无法找到,但现在我的控制台什么也没说 3)我需要做些什么来完成这项工作?现在它正试图引入标记为“足球”的推文。有更简单的方法吗?我应该只使用http.get而不是twit npm包吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试使用twitter api包来公开twit npm模块我发现以下它似乎是最近的:https://atmospherejs.com/danimal/twit只是为了让生活更轻松。

另外你需要记住twit api将是异步的,因为它是npm模块。您需要将调用转换为twitter api才能同步

这是你的方法的问题,它会在真正得到任何东西之前返回

var stream = T.stream('statuses/filter', { track: ['football']})

我们需要强制它等待使用流http://docs.meteor.com/#/full/meteor_wrapasync的结果  要么  https://github.com/meteorhacks/meteor-async

  1. 您可以安全地将其存储在server/文件夹中,甚至可以更好地存储在http://docs.meteor.com/#/full/meteor_settings
  2. 您不需要将Meteor.startup用于meteor.methods
  3. 如果你知道异步/同步只是让它同步功能,如果你不建议你阅读更多关于它的东西来真正理解它,它需要一些时间,但基本上我们需要做的想法它同步所以服务器等待API结果,然后返回meteor方法回调与API的结果,否则当你从客户端调用meteor方法时它不会等待并立即返回你,试验它添加一些控制台。 log()并查看它如何处理自己。
  4. 如何让它发挥作用? Helper很好,但你最好在客户端调用meteor方法,如服务器端的+ sync函数:

    Template.tweets.onCreated(function() {
        Meteor.call("getStreams", function(error, res) {
          console.log(res);
          Session.set("streams", res)
        });
    });