1. Meteor 包括什么:
命令行工具 meteor Command
編譯器 ?js, coffee, less, jade, sass
運行調(diào)試環(huán)境 ?meteor run
部署工具和平臺 ?Galaxy, ?yourapp.meteor.com
內(nèi)置移動編譯平臺
2. Meteor Principles :
Data on the Wire
One Language
Database Everywhere
Latency Compensation
Full Stack Reactivity
Embrace the Ecosystem : 很多Meteor 中的技術(shù)并不是自身開發(fā)的,但Meteor?
Simplicity Equals Productivity
3. 說說我理解的 Meteor :?
Meteor 是一個基于Node.js的全棧開發(fā)框架,不過也有很多人說Meteor不是框架,是一個跨平臺應(yīng)用解決方案平臺,因為它囊括了開發(fā)一款應(yīng)用程序(web or mobile)的所有方面,前端,后端,數(shù)據(jù)庫。
前端使用 Javascript,這是肯定的,不同的是 Meteor 在前端有一個 miniMongo 數(shù)據(jù)庫(這個數(shù)據(jù)庫好像也是用Javascript寫的),和后端的MongoDB 數(shù)據(jù)庫通過DDP 協(xié)議建立 Socket 長連接,從而達(dá)到數(shù)據(jù)隨動的效果。并且在 Meteor 這里UI的渲染,顯示的邏輯等都是在前端完成的,可以說是重前端輕后端。
后端使用 Node.js,負(fù)責(zé)同步和傳遞客戶端數(shù)據(jù),還有操作 server 端 DB。
4.? Meteor 官方包管理: https://atmospherejs.com/
5. Meteor Code Principles:
----Code in the /server folder only runs on server.
----Code in the /client folder only runs on client.
----Everything else runs on both the client and server
----Please put all of static assets(font, images, etc) to /public directory
6. ?The sequence of file is loaded ?
first be loading is which file in /lib folder
main.* file is loading after all files be loaded
others file is loading according to a-z
7. Meteor is no MVC?
8. --Use camelCase(myVariable) coding, ?--Use underscores(my_file.js) for file names. ?--CSS classes which use hyphens(.my-class) ?
9. if you prefer Coffeescript, Meteor has you covered. $ meteor add coffeescript. you will be good to go!
10. Meteor 的強(qiáng)大之處在于文件的查找。無論你把代碼文件放在目錄下的任何地方,Meteor 都可以找到它并且正確地進(jìn)行編譯。這意味著你永遠(yuǎn)都不需要手動編寫 JavaScript 或 CSS 文件的調(diào)用路徑。
11. Spacebars 是 Meteor 附帶的一個模版語言.?READ GITHUB
12. Meteor 跟蹤了項目目錄下的所有文件,當(dāng)檢測到其中一個文件發(fā)生改變,Meteor 直接重啟正在運行的Meteor 服務(wù)器,并通知每個客戶端重新加載此頁面,其實這么說時不準(zhǔn)確的。Meteor 的動態(tài)代碼重載技術(shù)(HCR)類似于頁面的自動刷新但其session中的變量不變,而如果我們手動刷新頁面的話,其實是開啟了一個新的session。
13. Meteor 的核心功能就是服務(wù)器端和客戶端的自動數(shù)據(jù)同步,我們要仔細(xì)了解一下它是如何運作的,以及研究那個讓它得以運行的關(guān)鍵技術(shù): Meteor 集合(Collection)。
網(wǎng)絡(luò)應(yīng)用有三種基本方式保存數(shù)據(jù),各種方式有不同的角色:
--瀏覽器內(nèi)存:
? ? 像 JavaScript 變量的這些數(shù)據(jù)會保存在瀏覽器內(nèi)存中,意味著他們不是永久性的:它們存在于當(dāng)前瀏覽器標(biāo)簽中,當(dāng)標(biāo)簽關(guān)閉后它們會消失。
--瀏覽器存儲:
? ? 瀏覽器也可存儲較為永久性的數(shù)據(jù),使用 cookies 或本地存儲 Local Storage (http://diveinto
html5.info/storage.html)。雖然數(shù)據(jù)會在不同 session 間保持,但是只是針對于當(dāng)前用戶(包括標(biāo)簽之
間)但不能輕易地共享給其他用戶。
--服務(wù)器端數(shù)據(jù)庫:
? ? 你想永久保存數(shù)據(jù)并且提供給多個用戶的最好方法是數(shù)據(jù)庫(MongoDB 是 Meteor 應(yīng)用默認(rèn)的方案)。
不在client/或server/文件夾中代碼會在客戶端和服務(wù)器端運行。所以Posts集合在客戶端和服務(wù)器端都可
用。但是,在各自環(huán)境下所起的作用有很大不同。
在服務(wù)器,集合有一個任務(wù)就是和 Mongo 數(shù)據(jù)庫聯(lián)絡(luò),讀取任何數(shù)據(jù)變化。 在這種情況下,它可以比對標(biāo)準(zhǔn)的數(shù)據(jù)庫。
在客戶端,集合是一個安全拷貝來自于實時一致的數(shù)據(jù)子集??蛻舳说募峡偸?通常)透明地實時更新數(shù)據(jù)子集。
$ meteor shell ? 服務(wù)器端shell
$ meteor mongo ?數(shù)據(jù)庫控制臺
如果你把應(yīng)用部署到了*.meteor.com 上,你一樣可以通過 meteor mongo myApp 的方式進(jìn)入你應(yīng)用的 Mongo Shell,而且還可以輸入 meteor logs myApp 得到你應(yīng)用的 log 日志
Meteor 的客戶端 Mongo 的技術(shù)實現(xiàn)被成為 MiniMongo
在 Meteor 中,find() 返回值是一個游標(biāo)。游標(biāo)是一種從動數(shù)據(jù)源.如果你想輸出內(nèi)容,你可以對游標(biāo)使用 來把游標(biāo)轉(zhuǎn)換成數(shù)組。Meteor 十分智能地在應(yīng)用中保持游標(biāo)狀態(tài)而避免動不動就把游標(biāo)變成數(shù)組。這就造成了你不會經(jīng)常在 Meteor代碼中看到 fetch() 被調(diào)用。
這里我們要提到一個包 autopublish, 我們一直依賴于 autopublish 來讓我們的客戶端可以鏡像般地得到數(shù)據(jù)庫中的所有帖子,也就是說,它簡單的把整個Collection分享給所有連接的客戶端。最終我們需要做的是僅僅把我們客戶端需要看到的帖子傳輸過來。
首先刪除掉 autopublish 包 : ?$ meteor remove autopublish
建立 server/publications.js 并定義publish() 函數(shù) : ?Meteor.publish('posts', function(){ return Posts.find() });
在客戶端訂閱這個發(fā)布 $ ?vi main.js ---> Meteor.subscribe('posts');
安全檢驗(用戶登錄權(quán)限控制等)已經(jīng)集成在 Meteor 的 Collection 中,只是在默認(rèn)情況下它是關(guān)閉的。這樣的設(shè)置可以使你在??開始構(gòu)建 App 的時候更加輕松。我們的 App 不再需要這些輔助了,果斷扔掉吧!我們?nèi)h除insecure 包(恢復(fù)數(shù)據(jù)安全) ?$ ?meteor remove insecure.
audit-argument-checks?包用于增強(qiáng)安全性檢驗,對post參數(shù)做檢驗,還需要check包