基於Node和MongoDB的Web微博系統

基於Node和MongoDB的Web微博系統

概述

項目是受到《Node.js開發指南》一書啓發,做者BYVoid大佬是當時第一批Node開發者,當時學習者迫切須要一個這麼DEMO。固然如今已通過去不少年了,Node早就更新無數次了,12年的這本書也就過期,許多代碼都根本跑不通了,最後仍是要以官網API爲準。前端

  1. 項目的後臺用的express。
  2. 數據庫部分本身寫的原生MongoDB,沒有去用控制力更強大的mongoose框架,多寫原生東西對本身有好處。
  3. 前端用的是jQuery,underscore.js
  4. 樣式用的Bootstrap框架。

設計

形式上採用的是MVC結構,數據庫和加密部分在model層,路由控制充當Controller,ejs前端展現就是view層了。node

安裝依賴

"dependencies": {
  "ejs": "^2.5.7",
  "express": "^4.16.2",
  "express-session": "^1.15.6",
  "formidable": "^1.1.1",
  "gm": "^1.23.0",
  "mongodb": "^2.2.33" }

若是想二次開發,node——modules部分建議按照上面版本本身從新npm install,個人node版本是 v8.3.0 ,目前最新的是v8.9.0mysql

功能和實現

  1. 登錄模塊,註冊模塊,微博的發表,所有用戶的微博,我的所有微博,全部用戶列表,點擊某個用戶能夠看到該用戶發表過的微博,用戶退出,頭像的上傳和剪裁,登錄以後直接點擊本身的默認頭像可進入頭像上傳頁面,主頁根據登錄狀態變化呈現不一樣頁面。
  2. 狀態的判斷是經過express-session來傳遞。
  3. 服務器對頭像圖片的處理用到了GraphicsMagick ,這個插件能夠截屏,而後我寫了一個腳本獲取到這個插件截屏時大小參數,在前端界面上進行圖片的剪裁。
  4. 數據庫對mongo的增刪改查和分頁功能比較原生,直接參考官網Mongo對Nodejs開放的API,一些操做實現了重載化,JS裏是沒有函數重載的,只能本身手寫判斷,好比查詢操做find函數,能夠根據參數的不一樣進行重載,根據參數的個數判斷,來確實是否是要對查詢的結果進行排序,分頁,跳過和限制。
  5. 微博的展現部分,用到了underscore.js,因爲和ejs的模版標記重合了,我修改了underscore的源碼,把模版標記<%%>變成了{{}}。所有微博展現的處理中,由於用戶的信息是存在user集合裏,微博存在posts集合裏,mongo不像mysql傳統關係型數據庫那樣,是沒有外鍵的,我get全部微博的時候查詢的是posts集合,posts集合裏沒有存用戶的頭像,我要想在所有微博裏顯示用戶的頭像,只好採用雙重AJAX回調,第一層獲取到全部說說,第二層在迭代器中,這個迭代器是一個遞歸,爲了分頁效果,用迭代器實現了閉包,這是JS的坑誰用誰知道。(固然ES6能夠輕鬆解決這個問題),迭代器得到第一層回調結果的username,再查詢獲取到頭像,再合併到第一個查詢結果。
  6. 還有其餘的一些東西什麼的感興趣能夠fork,clone 看源碼。

待改進

微博的評論,點贊功能,每一個微博的主頁功能等等,能填的坑還有不少,不過大致框架寫好了,開源出來也是但願你們能一塊兒加功能。git

結語

這個項目用來練習Node比較好了,代碼註釋寫的不少,若是本項目對您有一絲絲的小幫助,求個star,也歡迎fork,一塊兒加上更多功能。github

DEMO

代碼:

GitHub倉庫web

有的問題能夠評論,Issue,或者加扣扣1104272319聯繫我。

相關文章
相關標籤/搜索