会话未在服务器端的Meteor.methods中定义,但在客户端

会话未在服务器端的Meteor.methods中定义,但在客户端,meteor,Meteor,我有一个设置会话变量的方法: Meteor.methods({ updateSomething: (k) => { CollectionOfSomething.insert({ k: k }); Session.set('latestSomething', CollectionOfSomething.findOne({ k: k }); } }); 接下来发生的

我有一个设置会话变量的方法:

Meteor.methods({
    updateSomething: (k) => {
        CollectionOfSomething.insert({
            k: k
        });
        Session.set('latestSomething', CollectionOfSomething.findOne({
            k: k
        });
    }
});
接下来发生的事情对我来说是矛盾的。由于这些方法是在
lib
文件夹中定义的(这是一种正确的方法),因此调用会在客户端和服务器上调用该方法。在客户机上,它为会话变量
latestSomething
生成新值,并每次刷新。但在服务器上,我遇到了一个异常:

Exception while invoking method 'updateSomething' ReferenceError: Session is not defined
此异常只是一个警告,不会终止应用程序实例。但这似乎不是一个好的做法,所有这些消息都塞进了服务器日志,没有任何价值


那我该怎么办?Meteor惯用的方法是什么?

会话对象仅在客户机上可用(请参阅-两个函数定义框均显示“客户机”)。您最好的选择是
返回
收集something.findOne()的结果,然后在客户端的回调函数中使用
Session.set


会话
是一个短暂的对象,在硬页面刷新或用户手动导航到其他页面时丢失,因此在服务器上维护它没有任何意义。

会话
对象仅在客户机上可用(请参阅-两个函数定义框均显示“客户机”)。您最好的选择是
返回
收集something.findOne()的结果,然后在客户端的回调函数中使用
Session.set


会话是一个短暂的对象,在硬页面刷新或用户手动导航到其他页面时丢失,因此在服务器上维护它没有任何意义。

您不能在服务器上使用会话。这是为了客户的反应。在回调上设置它,如下所示:

Meteor.call('updateSomething', yourThing, function (err, id) {
  if (!err) {
    Session.set('somevar', id);
  }
})
你的流星法是这样的

Meteor.methods({
  updateSomething: function (thing) {
    return MyCollection.insert(thing);  // returns the id
  }
});

无法在服务器上使用会话。这是为了客户的反应。在回调上设置它,如下所示:

Meteor.call('updateSomething', yourThing, function (err, id) {
  if (!err) {
    Session.set('somevar', id);
  }
})
你的流星法是这样的

Meteor.methods({
  updateSomething: function (thing) {
    return MyCollection.insert(thing);  // returns the id
  }
});

“会话是一个短暂的对象,当页面重新加载或路由更改时会丢失。”
Session
的全部目的并非如此。@Kyll,你能链接到该语句的源代码吗?像这样的包之所以存在,是因为Session变量仅在当前页面的生命周期内有效,因此名为“Session”。
Session
是一个命名的全局
ReactiveDict
,它是为在热重新加载和路由更改期间保持而构建的。你的陈述充其量也很不准确。再说一次,你有消息来源吗?我熟悉的流星不是那样工作的。看见
Session
的目的不是持久性,而是内置的反应性。@IsaacLyman,
Session
将在硬页reffres上丢失,但它们的持续时间将比当前路径和热代码推送时间长。不这样做会很奇怪,因此它们基于纯
反应dict
“会话是一个短暂的对象,当页面重新加载或路由更改时会丢失。”会话的整个目的并不是这样。@Kyll,你能链接到该语句的源代码吗?像这样的包之所以存在,是因为Session变量仅在当前页面的生命周期内有效,因此名为“Session”。
Session
是一个命名的全局
ReactiveDict
,它是为在热重新加载和路由更改期间保持而构建的。你的陈述充其量也很不准确。再说一次,你有消息来源吗?我熟悉的流星不是那样工作的。看见
Session
的目的不是持久性,而是内置的反应性。@IsaacLyman,
Session
将在硬页reffres上丢失,但它们的持续时间将比当前路径和热代码推送时间长。不这样做会很奇怪,因此它们基于纯
反应dict