流星:会话客户端

Meteor: session-client-side

所以我正在尝试构建 the angular-meteor WhatsApp clone tutorial using Ionic 2 CLI

本教程基本上删除了meteor项目中的client文件夹,并使用ionic项目中的meteor-client-side package连接到meteor服务器。

效果很好,但现在我想订阅带有反应参数的流星出版物。

搜索 Meteor API 文档后,我找到了 Session 对象:

Session provides a global object on the client that you can use to store an arbitrary set of key-value pairs. Use it to store things like the currently selected item in a list.

What’s special about Session is that it’s reactive. If you call Session.get("currentList") from inside a template, the template will automatically be rerendered whenever  Session.set("currentList", x) is called.

Meteor Subscribe Documentation中您可以找到以下示例:

Tracker.autorun(function () {

Meteor.subscribe("chat", {room: Session.get("current-room")});

Meteor.subscribe("privateMessages");

});

This subscribes you to the chat messages in the current room and to your private messages. When you change rooms by calling Session.set("current-room", "new-room"), Meteor will subscribe to the new room’s chat messages, unsubscribe from the original room’s chat messages, and continue to stay subscribed to your private messages.

这正是我想做的。但正如 the Session documentation 所述,会话是我必须添加到流星项目的包:

To add Session to your application, run this command in your terminal:

meteor add session

现在我的问题是,有什么方法可以将会话添加到 meteor-client-side 包中吗?

如果我只是尝试调用 Session.set() 它会在 运行 时间失败 Session is not defined

我的猜测是我需要一些 npm 包来提取会话功能(基本上是一个会话客户端 npm 包),比如 accounts-base-client-side

还有其他方法吗? 我将如何构建自己的会话客户端?

我试图在我的流星项目中 运行 meteor add session 但无法在 .meteor 文件夹和 npm_modules.[=31 中的任何地方找到 Session 的代码=]

我也调查了 meteor GitHub but the Session.js file they have contains only documentation

任何输入如何做这样的事情都很好

更新:

我查看了 accounts-base-client-side 包,发现它们是使用脚本自动生成的,所以我目前正在尝试调整此脚本以使用 Session 而不是 accounts-base。 您可以在以下位置找到我的尝试:https://github.com/AwsmOli/session-client-side

仍在进行中,但我应该尽快开始工作

更新二:

看到我的回答,我的会话客户端现在可以工作了:)

"Session" 变量应该刚刚出现并且可以访问。如果您需要验证这一点,请启动一个新项目添加包并编写一些代码来访问它。很可能有什么东西(无意中)破坏了 Session 变量——我之前在另一个包中看到过这个。

另一种方法是使用 "getReactively"。下面是一个在查询中使用它的助手。确保在助手之前声明它(否则它不会工作)。这个使用另一个助手的结果,但它可以是任何变量,您只需分配变量以启动反应和 运行 助手。

this.helpers({
  currentUser: () => { return Meteor.user() },
  elder: () => {
    let e = Elders.findOne({_id: this.getReactively('this.currentUser._id')});
    if (e) {
      utils.services.setupElder(e);
    }
    return e;
  }
});

根据 meteor docs,您必须导入它:

import { Session } from 'meteor/session'

这将在客户端启用它。

在早期的 meteor 版本中,这不是必需的,因为它既是默认包,又自动导入到全局命名空间中。

我最终自己创建了会话客户端包,并且运行良好。

如果您也需要它,可以在 GitHub 上找到它: https://github.com/AwsmOli/session-client-side

和 NPM:

npm install session-client-side

致谢 idanwe,他创建了客户端包并使他的工作很容易适应任何 meteor 包:)

要将它与 Ionic 2 应用程序一起使用:

将其导入您的入口点 (src/app/main.prod.ts & src/app/main.dev.ts)

import 'session-client-side';

现在可以在您的应用程序的任何位置访问全局 Session 变量:

 Session.set("aCoolNameFormyAwsmChangingObject", myAwsmChangingObject); 

感谢您的帮助!