勺子開發(fā)架構(gòu)分享02 -- NodeJS+Express+MongoDB

Node.js && Express

Node.js 是一個基于Chrome JavaScript運行時建立的一個平臺,用來方便地搭建快速的易于擴展的網(wǎng)絡應用。
Node.js 借助事件驅(qū)動,非阻塞I/O 模型變得輕量和高效,非常適合運行在分布式設備的數(shù)據(jù)密集型的實時應用。
V8引擎執(zhí)行Javascript的速度非???,性能非常好。Node對一些特殊用例進行了優(yōu)化,提供了替代的API,使得V8在非瀏覽器環(huán)境下運行得更好。(摘自百度百科)

Express是NodeJS的一個框架。能夠幫助人們快速建立起一個NodeJS網(wǎng)站。

關于nodejs和express的學習資料可以去CNode查找。

MongoDB

MongoDB是一個開源的NonSQL數(shù)據(jù)庫。最主要的特點是Document-Orientanted Storage。即JSON-style documents with dynamic schemas offer simplicity and power.
MongoDB的數(shù)據(jù)庫設計有一個理念是不要按照Model的邏輯來設計數(shù)據(jù)庫,而是按照應用場景。
例如,現(xiàn)在有一個博客。數(shù)據(jù)庫里面有一個叫Post的文檔(表),代表一篇博客。每一篇博客有若干個評論(comment)。那么設計的時候有兩種方式可選:

  1. Post內(nèi)部有一個數(shù)組,記錄了所有comment這個子文檔(sub-document)。結(jié)構(gòu)如下:
    Post

    {
      title: "文章標題",
      content: "文章內(nèi)容",
      comments: [
            {user:"發(fā)布的用戶ID", content:"評論內(nèi)容1"},
            {user:"發(fā)布的用戶ID", content:"評論內(nèi)容2"}
      ]
    }
    
  2. Post和Comment相分離。結(jié)構(gòu)如下:
    Post

    {
      title: "文章標題",
      content: "文章內(nèi)容",
      comments: [commentID1, commentID2]
    }
    

Comment

   {
     _id: "ObjectId(xxxxxxxxxxxxxx)"
     user:"發(fā)布的用戶ID", 
     content:"評論內(nèi)容"
   }

在MongoDB中,兩種設計并無優(yōu)劣之分,應該選用哪種設計取決于產(chǎn)品的應用場景。即:一個帖子下面的評論,是不是只會顯示在和帖子一個頁面?如果是的話,就選擇第一種設計方式。
比如有一個網(wǎng)站,會把精彩評論放到首頁去。每個評論和帖子有關聯(lián)但相對獨立。這樣的話,第二種設計方式就比較好。
勺子的收藏分享中的評論以及點贊,是按照第一種設計方式來的。

IDE

勺子項目使用了WebStorm作為IDE。在WebStore的新建項目的模板中,可以直接選擇express項目模板。這樣一個基本的nodejs+express的項目就建立好了。

登錄注冊系統(tǒng)

基于Token的驗證

勺子舍棄了傳統(tǒng)的session方式,采用了基于Token的驗證方式。其優(yōu)點以及實現(xiàn)方式見Cookies vs Tokens. Getting auth right with Angular.JS

路由設計

由于網(wǎng)站前端將會用AngularJS來設計,所以網(wǎng)站的路由其實就是API部分。所以對于網(wǎng)站的路由請求,分為兩部分:

  1. 所有以/api為開頭的請求,交給API部分來處理。
  2. 所有其他請求,服務器都把AngularJS的app發(fā)送給瀏覽器。由AngularJS來管理路由。

API設計

API分為以下幾大模塊:

  • Auth模塊:負責處理注冊、登錄。
  • 收藏模塊:負責收藏這個Resource的CRUD事件。Comment事件。點贊事件,搜索等。
  • 用戶模塊:負責用戶的修改資料,用戶的資料顯示,關注/取消關注等事件。
  • 收藏夾模塊:負責收藏夾的CRUD。關注/取消關注單個收藏夾。
  • 消息模塊:負責記錄和處理評論消息、點贊消息、私信。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容