博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实时开发框架Meteor API解读系列<五>Session
阅读量:2201 次
发布时间:2019-05-03

本文共 2655 字,大约阅读时间需要 8 分钟。

写在前面的话

  1. 本篇博客主要讲Session
  2. 使用的meteor版本为0.8.0
  3. 老话重提 ,尽量以官方文档为主
  4. 本篇博客有不正确的地方在所难免,如有发现望指出。
  5. 本篇博客地址: 转载请注明出处,谢谢

Session

Meteor里面的Session不是我们以前接触过服务端的Session, 这里的Session是在客户端使用的(浏览器)一个对象。不过它功能和服务端Session有一点相似,那就是都是用来保存数据的。这个保存的数据是一个活性数据源。当然,Session在客户端是个全局变量,在客户端任何地方都可以直接使用它。

在详细说明之前,先看它的几个函数。如果有一点编程经验根据函数名就知道它的作用了。注意,Session对象只存在于客户端,它的函数也只能在客户端使用。不能在服务端使用,服务端是没有Session这个对象的。

Session.set(key,value)

在Session中保存或修改一个键值对。key 是String类型,value是个EJSON对象,当然也就包括基本数据类型。 
例如:

Session.set("people","张三");//保存一个新的键值对....Session.set("people",{
name:"张三",age:18}) ;//修改键值对。这里仅为了展示能保存的数据类型才选择不同数据类型,通常情况下,保存的数据类型是不会变化的,因为通常需要绑定元素或其他动作。

Session.setDefault(key,value)

设置默认值,当key的value未定义时。 如果value有定义,那么它的效果和set一样。

Session.get(key)

获取键的值。

session对象只有以上几个函数,相对来说比较简单。下面说说个人使用的经验。

Experience

想来说说活性数据源的问题。

活性数据源

官方没有给出完整的定义,只是用单词Reactivity Data来描述,我不清自己翻译成活性数据源是否正确。理解起来很简单,所有使用了活性数据源的funcation(这里指 Template对象中使用的function)和template 一旦它所依赖的活性数据源发生值的变化,那么它将重新调用或者渲染。

简单看个代码。结构如下:(”-“代表应用根目录)

- --client #文件夹    |-API-005.html    |-API-005.js

API-005.html:

  API-005  {
{> testValue}}

{
{> testFunction}}

API-005.js:

Session.setDefault("name","test");//设置默认值var  demoFunctionWillNotCall = function (){
var s = Session.get("name") console.log("name Session 改变,发生调用");//这句话永远不会打印,哪怕name发生改变。因为它没有被任何Template对象调用}var demoFunctionWillCall = function(){
var s = Session.get("age"); console.log("age Session 改变,发生调用");//一旦age的值改变 这句话就会打印,因为它在testFunction中被调用了 return "call"}Template.testValue.testSessionChangeForValue = function () {
return Session.get("name");};Template.testFunction.testSessionChangeForFunction = function () {
demoFunctionWillCall() return "test Age";};

启动应用,打开浏览器控制台。可以看到demoFunctionWillNotCall并没有执行,而demoFunctionWillCall执行了一次,这很正常,因为模板渲染的时候被调用了。现在清空控制台。在控制台运行以下代码

Session.set("name","keepmoving");Session.set("age",999)

可以很明白的看到,结果如注释中所说一样。

Session使用的注意事项

避免多处使用

因为Session是全局对象,在任何地方都可以调用,某个key值的改变,影响所有的引用它的Template或function。又因为在实际开发中,我们一般需要建立多js或者Template文件保证代码的整洁性,所以如果多处都使用了同一个Session的key,那么一旦这个key需要修改,那么它所影响的范围也很广,可能造成代码出错。因此尽量避免这多个js文件中使用同一个Sesion的key值。这个会对以后的修改带来便利。

key命名规范

由于Session是全局变量,所有的值都存在了同一个Session中,一旦你的key命名不规范,可能导致两个不同作用的key值 重叠造成值的非正确性。哪怕key的名称长一点多几个单词也没关系,得保证它的唯一性。因为所过Session.set方法也是可以修改key值的。由于个人有个人的习惯,那么我仅给出个人的使用经验。在命名方面如:

Session.set("_name_testValue","abc")  //key+所用在的模板或者Session.set("_name_collectionName","abc") //key+所用在的Collection的名称等等,保证key是明确的,唯一的就行。

总结

以上仅是简单说明的一些活性数据源,当然活性数据源不仅只有Session,Session的用处也不仅是Demo中的这点用法,以后在用到时会进行说明。

涉及代码下载地址: 
或者到我的github : 目录下的Meteor/API-005查看

你可能感兴趣的文章
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>