为什么我的流星应用程序日志到服务器,而不是客户端

Why is my Meteor app logging to server but not client?

本文关键字:客户端 服务器 我的 流星 应用程序 日志 为什么      更新时间:2023-09-26

我正在构建一个流星应用程序挂钩到twitter api,我没有运气到目前为止让它工作。我使用twit包在服务器端进行调用,它将数据记录到服务器控制台,但是当客户端控制台去记录它时,没有数据。

客户端没有抛出错误,它在else语句中运行console.log来获取结果参数,但它显示为未定义。就好像结果回调在数据返回之前运行,但是我对Meteor的理解。调用方法是,它应该等待,直到它收到服务器的返回,然后才运行。

我在这里做错了什么?

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;
                }
            });
        }
    });
}

您在服务器代码中使用return的地方必须不使用:在异步回调中。Twit.get调用立即返回,函数结束(没有返回值)。所以客户端没有收到任何东西。一段时间后,Twit.get回来了,但return在这种情况下没有去任何地方。

这是一个很常见的问题。解决方案是将Twit.get调用封装到某种形状或形式的光纤中,以使其同步。例如这个答案:Iron Router Server Side Routing callback doesn't work