Node.js && Express
Node.js 是一個基于Chrome JavaScript運行時建立的一個平臺,用來方便地搭建快速的易于擴展的網絡應用。
Node.js 借助事件驅動,非阻塞I/O 模型變得輕量和高效,非常適合運行在分布式設備的數據密集型的實時應用。
V8引擎執行Javascript的速度非常快,性能非常好。Node對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下運行得更好。(摘自百度百科)
Express是NodeJS的一個框架。能夠幫助人們快速建立起一個NodeJS網站。
關于nodejs和express的學習資料可以去CNode查找。
MongoDB
MongoDB是一個開源的NonSQL數據庫。最主要的特點是Document-Orientanted Storage。即JSON-style documents with dynamic schemas offer simplicity and power.
MongoDB的數據庫設計有一個理念是不要按照Model的邏輯來設計數據庫,而是按照應用場景。
例如,現在有一個博客。數據庫里面有一個叫Post的文檔(表),代表一篇博客。每一篇博客有若干個評論(comment)。那么設計的時候有兩種方式可選:
-
Post內部有一個數組,記錄了所有comment這個子文檔(sub-document)。結構如下:
Post{ title: "文章標題", content: "文章內容", comments: [ {user:"發布的用戶ID", content:"評論內容1"}, {user:"發布的用戶ID", content:"評論內容2"} ] }
-
Post和Comment相分離。結構如下:
Post{ title: "文章標題", content: "文章內容", comments: [commentID1, commentID2] }
Comment
{
_id: "ObjectId(xxxxxxxxxxxxxx)"
user:"發布的用戶ID",
content:"評論內容"
}
在MongoDB中,兩種設計并無優劣之分,應該選用哪種設計取決于產品的應用場景。即:一個帖子下面的評論,是不是只會顯示在和帖子一個頁面?如果是的話,就選擇第一種設計方式。
比如有一個網站,會把精彩評論放到首頁去。每個評論和帖子有關聯但相對獨立。這樣的話,第二種設計方式就比較好。
勺子的收藏分享中的評論以及點贊,是按照第一種設計方式來的。
IDE
勺子項目使用了WebStorm作為IDE。在WebStore的新建項目的模板中,可以直接選擇express項目模板。這樣一個基本的nodejs+express的項目就建立好了。
登錄注冊系統
基于Token的驗證
勺子舍棄了傳統的session方式,采用了基于Token的驗證方式。其優點以及實現方式見Cookies vs Tokens. Getting auth right with Angular.JS
路由設計
由于網站前端將會用AngularJS來設計,所以網站的路由其實就是API部分。所以對于網站的路由請求,分為兩部分:
- 所有以/api為開頭的請求,交給API部分來處理。
- 所有其他請求,服務器都把AngularJS的app發送給瀏覽器。由AngularJS來管理路由。
API設計
API分為以下幾大模塊:
- Auth模塊:負責處理注冊、登錄。
- 收藏模塊:負責收藏這個Resource的CRUD事件。Comment事件。點贊事件,搜索等。
- 用戶模塊:負責用戶的修改資料,用戶的資料顯示,關注/取消關注等事件。
- 收藏夾模塊:負責收藏夾的CRUD。關注/取消關注單個收藏夾。
- 消息模塊:負責記錄和處理評論消息、點贊消息、私信。