Meteor - 基于Node.js和MongoDB的全栈开发框架
来源:互联网 发布:怎样更换淘宝密码 编辑:程序博客网 时间:2024/06/07 05:48
Meteor安装与运行
Meteor 是基于Node.js、MongoDB的全栈框架,使用之后发现Meteor很另类,它把更多的工作放到了前端,确切地说应该是混淆了前后端
安装(Mac or Linux)
执行下面的语句
curl https://install.meteor.com/ | sh
查看帮助
meteor --help
创建项目
meteor create learnmeteor
learnmeteor目录会生成如下文件
learnmeteor.js # a JavaScript file loaded on both client and serverlearnmeteor.html # an HTML file that defines view templateslearnmeteor.css # a CSS file to define your app's styles.meteor # internal Meteor files
运行
cd learnmeteormeteor
在浏览器打开http://localhost:3000
热代码推送
当保存修改的文件时,浏览器自动更新新内容,这个技术叫热代码推送(hot code push)
模板Spacebars
Meteor的默认模板叫Spacebars, 是Handlebars的变形
Tips
在模板中不能写DOCTYPE
声明
Can't set DOCTYPE here. (Meteor sets <!DOCTYPE html> for you)
也不能写html
元素
bad formatting in HTML template
所以Meteor的模板根元素只能有<head> <body> <template>
<head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>Welcome</h1> {{> hello}}</body><template name="hello"> <button>Click Me</button> <p>You've pressed the button {{counter}} times.</p></template>
在HTML中定义Templates
<head> <meta charset="UTF-8"> <title>My website!</title></head><body> <h1>Hello!</h1> {{> welcomePage}}</body><template name="welcomePage"> <p>Welcome to my website</p></template>
helpers
helpers用来给模板传递数据
helpers可以是values
Template.nametag.helpers({ name: "Ben Bitdiddle"});
也可以是functions
Template.nametag.helpers({ gender: function () { return 'Man' }});
也可以给函数传参
Template.nametag.helpers({ age: function (num) { return num }});
//模板<head> <meta charset="UTF-8"> <title>My website!</title></head><body> <h1>Hello!</h1> {{> welcomePage}}</body><template name="welcomePage"> <p>Welcome to my website, {{name}}, {{sex}}, {{age 26}}</p></template>//jsif (Meteor.isClient) { Template.welcomePage.helpers({ name: 'boy', sex: function () { return 'Man' }, age: function (num) { return num } })}
Spacebars的控制结构
{{#each data}} … {{/each}}
//模板<head> <meta charset="UTF-8"> <title>My website!</title></head><body> <h1>Hello!</h1> {{> welcomePage}}</body><template name="welcomePage"> {{#each people}} <p>Welcome to my website, {{name}}</p> {{/each}}</template>//jsif (Meteor.isClient) { Template.welcomePage.helpers({ people: [{name: 'baby'}, {name: 'god'}, {name: 'boby'}] })}
{{#if data}} … {{else}} … {{/if}}
这个很理解
{{#with data}} … {{/with}}
设置data上下文,功能和js中的with语句是一个意思
events
为模板指定事件处理程序
key的第一部分表示事件,第二部分表示almost any selector supported by JQuery
事件处理函数有两个参数,第一个参数是事件对象,第二个参数是模板实例
//模板<head> <meta charset="UTF-8"> <title>My website!</title></head><body> <h1>Hello!</h1> {{> welcomePage}}</body><template name="welcomePage"> <button class="welcome">Welcome</button></template>//jsif (Meteor.isClient) { Template.welcomePage.events({ 'click .welcome': function (event, template) { console.log(event) console.log(template) } })}
onRendered
注册一个函数,当模板实例插入到DOM时触发
Template.codeSample.onRendered(function () { hljs.highlightBlock(this.findAll('pre'));});
模板实例
template.findAll(selector)
从模板实例中选择符合CSS选择器的所有元素
template.find(selector)
从模板实例中选择符合CSS选择器的第一个元素
Session
当使用Session.set
时,Session.get
会自动变化
Session.set(key, value)
key - String value - EJSON-able Object or undefined
Session.get(key)
//模板<head> <meta charset="UTF-8"> <title>My website!</title></head><body> <h1>Hello!</h1> {{> welcomePage}}</body><template name="welcomePage"><button>change</button><p>{{counter}}</p></template>//jsif (Meteor.isClient) { Session.set('default-counter', 1) Template.welcomePage.helpers({ // 点击按钮时,数字不变 //counter: Session.get('default-counter') // 点击按钮时,数字会变化 counter: function () { return Session.get('default-counter') } }) Template.welcomePage.events({ 'click button': function () { Session.set('default-counter', Session.get('default-counter')+1) console.log(Session.get('default-counter')) //Session.set('default-counter', Session.get('default-counter')+1) } })}
Tracker
当Session variables, database queries, and other data sources变化时,执行Tracker中函数
Tracker.autorun(runFunc, [onError])
runFunc Function onError Function
Tracker.autorun(function () { //有了这一句才行 var c = Session.get('default-counter') console.log('do something')})
Collections
Meteor在collections
中存储数据,需要先使用new Mongo.Collection
声明一个collection
Posts = new Mongo.Collection("posts")Comments = new Mongo.Collection("comments")
下面列出操作collection
的函数
new Mongo.Collection(name, [options])collection.findOne([selector], [options])collection.find([selector], [options])collection.insert(doc, [callback])collection.update(selector, modifier, [options], [callback])collection.remove(selector, [callback])collection.allow(options)collection.deny(options)
Accounts
让用户使用Let users log in with passwords, Facebook, Google, GitHub, etc.
{{> loginButtons}}
Meteor.user
Meteor.userId
Meteor.users
{{currentUser}}
Methods
Methods are server functions that can be called from the client.
Meteor.methods(methods)
Meteor.call(name, [arg1, arg2…], [asyncCallback])
new Meteor.Error(error, [reason], [details])
发布和订阅
Meteor servers can publish sets of documents with Meteor.publish, and clients can subscribe to those publications with Meteor.subscribe. Any documents the client subscribes to will be available through the find method of client collections.
By default, every newly created Meteor app contains the autopublish package, which automatically publishes all available documents to every client.
禁止自动发布
meteor remove autopublish
Now you can use Meteor.publish and Meteor.subscribe to control what documents flow from the server to its clients.
Environment
Meteor.isClient
布尔值
Meteor.isServer
布尔值
Meteor.isServer
can be used to limit where code runs, but it does not prevent code from being sent to the client. Any sensitive code that you don’t want served to the client, such as code containing passwords or authentication mechanisms, should be kept in the server directory.
Meteor.startup(func)
Run code when a client or a server starts.
if (Meteor.isClient) {}if (Meteor.isServer) { Meteor.startup(function () { // code to run on server at startup });}
- Meteor - 基于Node.js和MongoDB的全栈开发框架
- Node.js API 全栈 开发框架
- 基于node.js+ MongoDB的mircoblog,完成参考《Node.js开发指南》的mircoblog
- Ubuntu12.04 Node.js MongoDb 和 express框架的搭建
- Meteor——以NodeJS为基础环境,MongoDB为数据环境的全栈开发平台!
- Meteor——以NodeJS为基础环境,MongoDB为数据环境的全栈开发平台!
- KoaHub平台基于Node.js开发的Koa的连接MongoDB插件代码详情
- KoaHub.js是基于 Koa.js 平台的 Node.js web 快速开发框架
- 基于Node.js的Web框架集合
- 基于Vue + Node.js + MongoDB的图片上传组件,实现图片的预览和删除
- BLUE,第一款基于VUE.JS + Node.JS + Native APP的前后端开发框架
- vue2.0+node.js+MongoDB全栈打造商城
- CK2359-vue2.0+node.js+MongoDB全栈打造商城
- 使用 Angular.js, Node.js 和 MongoDB开发简单案例
- 使用Node.js + Mongodb构建基于Cloud Foundry的项目
- 使用Node.js + Mongodb构建基于Cloud Foundry的项目
- 基于 Node.js + Express + mongoDB + Bootstrap 搭建的电影网站
- 惊艳的基于nodejs的实时Web开发框架Meteor介绍
- android属性动画Property
- 排序算法小结
- 今目标,第三省
- UGUI 锚点坑
- android程序中读写文件
- Meteor - 基于Node.js和MongoDB的全栈开发框架
- 异常
- 【软考之路】视频学习总结
- 《Python核心编程》第8章 习题
- 读书笔记
- 日常记录
- 与、或、非 异或 基本逻辑运算
- 让开发板飞——四轴飞控开发项目
- 笔试面试排序算法大总结(干货)