我正在尝试使用服务器端方法在浏览器控制台中返回推文JSON对象。到目前为止,我的应用程序可以从Twitter API中提取信息并将所有数据插入到集合中,但它不会将数据返回给调用。我已经使用调用和方法完成了一系列测试以调试此问题,我认为光纤可能会改变此调用/方法的工作方式。
http://sf-tweet-locator.meteor.com/
我希望能够从每个对象中提取longetude和纬度,以便我可以将每条推文位置的引脚放在地图上。我不确定我这样做的方式是“最好”的方式,但我对所有建议持开放态度。
if (Meteor.isClient) {
Meteor.call("tweets", function(error, results) {
console.log(results); //results.data should be a JSON object
});
}
Meteor.methods({
Fiber = Npm.require('fibers');
tweets: function(){
Twit = new TwitMaker({
consumer_key: '...',
consumer_secret: '...',
access_token: '...',
access_token_secret: '...'
});
sanFrancisco = [ '-122.75', '36.8', '-121.75', '37.8' ];
stream = Twit.stream('statuses/filter', { locations: sanFrancisco });
var wrappedInsert = Meteor.bindEnvironment(function(tweet) {
var userName = tweet.user.screen_name;
var userTweet = tweet.text;
console.log(userName + " says: " + userTweet);
Posts.insert(tweet);
return tweet;
}, "Failed to insert tweet into Posts collection.");
stream.on('tweet', function (tweet) {
wrappedInsert(tweet);
return tweet;
});
},
})
答案 0 :(得分:0)
您可以将其作为出版物 - 这样您就不会将无用的数据插入到Posts
集合中,
此示例创建一个发布,它将每条新推文发送到客户端上的local-tweets
集合。
如果需要引用源查询,可以将queryId
传递给订阅/发布,并在每个推文文档中返回。
if (Meteor.isClient){
var localTweets = new Meteor.Collection('local-tweets');
Meteor.subscribe("tweets", [ '-122.75', '36.8', '-121.75', '37.8' ]);
localTweets.observe({
added: function(doc) { console.log('tweet received!', doc); }
});
}
if (Meteor.isServer){
Meteor.publish("tweets", function(bbox){
var pub = this, stopped = false;
var Twit = new TwitMaker({
consumer_key: '...',
consumer_secret: '...',
access_token: '...',
access_token_secret: '...'
});
stream = Twit.stream('statuses/filter', { locations: bbox });
var publishTweet = Meteor.bindEnvironment(function(tweet) {
if (stopped) return;
pub.added("local-tweets", Random.id() /* or some other id*/, tweet);
}, "Failed to tweet.");
stream.on('tweet', publishTweet);
this.ready()
this.onStop(function(){
/* any other cleanup? */
stopped = true;
});
});
}