Meteor 0.5.9:在服务器方法中替换使用Session?

时间:2013-03-18 05:25:03

标签: session methods client meteor

所以,我试图做以下事情:

if(Meteor.isServer){
    Meteor.methods({connect_to_api: function(vars){
        // get data from remote API
        return data;
    }});
}

if(Meteor.isClient){
    Template.myTpl.content = function(){
        Meteor.call('connect_to_api', vars, function(err,data){
            Session.set('placeholder', data);
        });
        return Session.get('placeholder');
    };
}

这似乎工作得很好,但是,当然,当从服务器中删除Session对象时,现在在0.5.9中断。你现在在世界上如何创建一个使用仅服务器(我们不想在客户端加载的东西)方法调用的反应模板,并从该Method调用中获取数据。您不能在回调函数中放置任何会话引用,因为它在服务器上不存在,并且我不知道此方案可用的任何其他响应数据源。

我对Meteor很陌生,所以我真的想要确定最有可能成为面向未来的最佳实践。显然上面的实现不是它。

编辑:澄清一下,这不是我从模板函数返回时的问题。这是服务器上存在的Session问题。上面的代码将在服务器上生成以下错误消息:

Exception while invoking method 'connect_to_api' ReferenceError: Session is not defined
at Meteor.methods.connect_to_api (path/to/file.js:#:#)
at _.extend.protocol_handlers.method.exception ... etc etc

2 个答案:

答案 0 :(得分:1)

在回调中设置会话似乎工作正常,请参阅我在github上创建的这个项目:https://github.com/jtblin/meteor_session_test。在此示例中,我以服务器方法返回数据,并在回调中的会话中设置它。

您的代码有两个问题:

1)Meteor.methods中缺少右括号位置。代码应该是:

Meteor.methods({
    connect_to_api: function(vars) {
        // get data from remote API
        return data;
    }
});

2)如上所述,在回调完成之前,即在回调方法有时间设置会话变量之前,返回会话中的值。我想这就是你在会话变量中没有看到任何数据的原因。

答案 1 :(得分:0)

我觉得自己像个白痴(不是第一次,不是最后一次)。感谢jtblin告诉我Session.set确实在回调中工作,我回过头来搜索我的Meteor.method函数。事实证明,在我使用Session.get的代码中埋藏了一个地方,这就是抛出错误的原因。一旦我从客户端传递了这个价值,而不是试图在方法本身中获得它,那么这一切对世界都是正确的。

哦,你确实可以毫无问题地订购上述东西。