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

Session Meteor 0.5.9:在服务器方法中使用会话的替换?,session,methods,client,meteor,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_a

因此,我试图做如下事情:

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');
    };
}
这似乎工作正常,但是,当然,现在在0.5.9中中断,因为会话对象已从服务器中删除。您现在是如何创建一个只使用服务器(我们不希望在客户端加载的东西)方法调用并从该方法调用中获取数据的反应式模板的。您不能在回调函数中放置任何会话引用,因为它在服务器上不存在,而且我不知道有任何其他可用于此场景的反应式数据源

我对Meteor还很陌生,所以我真的在努力确定最佳实践的东西,它最有可能成为未来的证明。显然,上面的实现并非如此

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

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

在回调中设置会话似乎工作正常,请参阅我在github上创建的此项目:。在本例中,我在服务器方法中返回数据,并在回调的会话中设置它

您的代码有两个问题:

1) 在Meteor.methods中缺少闭合支撑放置。代码应为:

Meteor.methods({
    connect_to_api: function(vars) {
        // get data from remote API
        return data;
    }
});
2) 如上所述,在回调完成之前,即回调方法有时间设置会话变量之前,在会话中返回该值。我想这就是为什么您还没有在会话变量中看到任何数据。

我觉得自己像个白痴(不是第一次,也不是最后一次)。感谢jtblin向我展示了Session.set确实可以在回调中工作,我回去搜索了Meteor.method函数。事实证明,代码中有一个点隐藏在我使用Session.get的地方,这就是抛出错误的地方。一旦我从客户机传递了这个值,而不是试图在方法本身中获取它,一切都会好起来的


哦,您确实可以像上面那样毫无问题地订购东西。

我认为您的代码无论如何都不会像返回会话.get('placeholder')将在Meteor.call上的回调完成之前发生,不是吗?我原以为在回调中设置会话仍然有效,但如果不行,我同意这可能是个问题。在回调中设置会话不起作用。回调不会在客户端上运行,而是传递给方法(在服务器上),以便在方法完成时运行。由于从服务器上删除了会话访问,我很难在不使用MongoDB的情况下从服务器上定义一种设置特定于客户端的数据的方法--我不明白为什么会删除它。。。再说一次,如果我有“发臭的‘思考’”,我希望有人能教我“正确”(或至少更好)的方法。它很好用,我只是举了一个简单的例子来证明它,见下文。问题在于你的代码。我纠正了我在原始帖子中丢失的括号打字错误(这不是我源代码中的问题)。这也不是在错误的时间设置会话的问题,因为会话是被动的,包含的函数会在发生任何更改时立即重新运行。问题是服务器上不存在会话。如果我运行(类似于)上述代码,即在回调函数中放置Session.set('x'),我会在服务器上得到以下错误:调用方法“myMethod”ReferenceError时出现异常:未定义Session查看我在Github上为此创建的项目:,您可以看到,我在回调中设置了会话,没有收到任何错误。单击按钮时,设置的会话变量也会正确显示在控制台中。你能在github上发布一些代码来重新处理这个问题吗?