大家好,欢迎来到IT知识分享网。
集合:
它是meteor的核心,服务器端和客户端的自动数据同步。
集合是一个特殊的数据结构,它会将 数据存到mongodb中,在浏览器会有一个链接还进行实时同步。
它可不是通过ajax请求,而是用的websocket长链接来做的。
我们创建的集合需要在客户端和服务器端执行。
可以在lib内创建一个collection文件夹,它会在两端运行。
创建一个posts.js文件:
posts=new Mongo.Collection(‘posts’);
创建时不需要用var 来创建变量来存储,因为var会限制对象的作用域在文件内。
我们想要在整个应用中访问就不需要var。
不在client 和server中的文件代码都会在两端运行,所以集合当然会在两端运行。
但是在环境下所起的作用有很大不同。
在服务器端它会和mongodb数据库联络。读取数据变化。
在客户端它是一个安全拷贝的数据子集,它会实时的更新本地数据。
如果数据库在部署上,可以用:
meteor mongo myApp进行mongo shell
db.posts.insert({});
浏览器我们可以在console里,通过posts来获取数据
posts.find().count()
MiniMongo:
客户端的mongo实现被称为MiniMongo,它目前并不是完整的,有些mongo功能是无法实现的。
客户端-服务器通过:
现在就可以实时数据了。
在服务端添加一条数据,会映射到所有链接的本地。
我们可以通过meteor reset来重置数据库,会删除所所集合数据。
在server里可以创建js,
通过posts来获取数据,并且修改。
if(post.find().count()===0){
posts.insert({})
}
本地的postlist.js里也可访问posts。并返回数据到模板。
查找与提取。
在meteor中find()返回的是一个游标。而不是直接的数据。它是一种从数据源。
现在我们一直用着autopublish这个包,它在创建项目时默认存在的。
它用来为我演示实时数据的实现。
它只是简单的把整个集合分享给所有链接的客户端。
实际开发中我们肯定不会这样的,一下把几百万的数据都缓存….
所以我们需要自己来编写.
meteor remove autopublish
当删除了包时,页面上数据也显示不出来了。
这是因为我一直用此包来实现实时数据的。
我们需要在服务端编写发布,来返回指定条件下的集合.
在server下创建publications.js
//发布集合 //定义发布名称 回返一个集合find //这里的发布是在server上运行的。 //客户端js需要订阅这个发布来获取数据。
Meteor.publish(‘posts’,function(){
return post.find({status:0});//返回状态为0的数据。
});
//返回指定作者的集合 //通过给函数指定参数,用find来查找指定条件的数据。 //订阅时传递参数来返回指定条件的数据 Meteor.publish('postsAuthor',function(author){ return posts.find({ status:0,author:author},{ fields:{ status:false}}); });
客户端订阅:
在client下的js里创建main.js
Meteor.subscribe(‘posts’);//订阅
//订阅有条件的发布 //传递参数查找条件的数据 //这样本地的posts返回的就是查找的数据
Meteor.subscribe(‘postsAthor’,’star’)
发布时函数可以有参数,来实现条件发布。
订阅时传递值。
————————————————
总结:
集合在两端都需要创建的,需放在Lib里
发布和订阅,分别创建在两端。
服务器发布返回一个find() 可以指定返回属性和条件
本地订阅放在main.js里在运行最后执行。
发布和订阅用来建立两端链接,实现实时数据通信。
这样模板js里就可使用posts.find()来绑定数据了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119501.html