为什么我的Meteor应用程序登录到服务器而不是客户端?

问题描述 投票:0回答:1

我正在构建连接到Twitter API的流星应用程序,到目前为止我还没有运气。 我正在使用twit程序包在服务器端进行调用,它会将数据记录到服务器控制台,但是当客户端控制台进行记录时,就没有数据了。

客户端不会抛出错误,它会在else语句中为result参数运行console.log,但是它是作为undefined传入的。 好像结果回调在数据返回之前就已经运行了,但是我对Meteor.call方法的理解是,它应该等到它从服务器收到回声后再运行。

我在这里做错了什么?

if (Meteor.isClient) {
  Template.hello.greeting = function () {
    return "Welcome to testing.";
  };

  Template.hello.recentFollows = function () {
    return Session.get("recentFollows");
  };

  Template.hello.events({
    'click #fetchButton': function () {

        console.log("Recent tweets from stream!");

        userName = "josiahgoff";

        Meteor.call('getBananaTweets', function(err, result) {
            if(err) {
                console.log("error occurred on receiving data on server. ", err);
            } else {
                console.log("result: ", result);
                Session.set("recentFollows", result);
            }
        });

    }
  });
}

if (Meteor.isServer) {
    Meteor.startup(function () {
        Twit = new TwitMaker({
            consumer_key:         '******',
            consumer_secret:      '******',
            access_token:         '******',
            access_token_secret:  '******'
        });
    });

    Meteor.methods({
        getBananaTweets: function () {
            Twit.get('search/tweets', { q: 'banana since:2011-11-11', count: 1 }, function(err, result) {
                if (err) {
                    console.log("Error", err);
                    return err;
                } else {
                    console.log(result);
                    return result;
                }
            });
        }
    });
}
javascript rest twitter meteor
1个回答
1
投票

您正在服务器代码中不能使用return的地方使用它:在异步回调中。 Twit.get调用立即返回,函数结束(没有返回值)。 因此客户什么也收不到。 一段时间后, Twit.get回来了,但是在那种情况下return就没有了。

这是一个很常见的问题。 解决方案是将Twit.get调用包装成某种形状或形式的光纤,以使其同步。 例如,请参见以下答案: Iron Router服务器端路由回调不起作用

© www.soinside.com 2019 - 2024. All rights reserved.