標籤:one 使用者 迭代器 代碼 mysq post 結構 hub phi
基於Node和MongoDB的Web微博系統概述
項目是受到《Node.js開發指南》一書啟發,作者BYVoid大佬是當時第一批Node開發人員,當時學習者迫切需要一個這麼DEMO。當然現在已經過去很多年了,Node早就更新無數次了,12年的這本書也就過時,許多代碼都根本跑不通了,最後還是要以官網API為準。
- 項目的後台用的express。
- 資料庫部分自己寫的原生MongoDB,沒有去用控制力更強大的mongoose架構,多寫原生東西對自己有好處。
- 前端用的是jQuery,underscore.js
- 樣式用的Bootstrap架構。
設計
形式上採用的是MVC結構,資料庫和加密部分在model層,路由控制充當Controller,ejs前端展示就是view層了。
安裝依賴
"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.0
功能和實現
- 登陸模組,註冊模組,微博的發表,全部使用者的微博,個人全部微博,所有使用者列表,點擊某個使用者可以看到該使用者發表過的微博,使用者退出,頭像的上傳和剪裁,登陸之後直接點擊自己的預設頭像可進入頭像上傳頁面,首頁根據登陸狀態變化呈現不同頁面。
- 狀態的判斷是通過express-session來傳遞。
- 伺服器對頭像圖片的處理用到了GraphicsMagick ,這個外掛程式可以截屏,然後我寫了一個指令碼擷取到這個外掛程式截屏時大小參數,在前端介面上進行圖片的剪裁。
- 資料庫對mongo的增刪改查和分頁功能比較原生,直接參考官網Mongo對Nodejs開放的API,一些操作實現了重載化,JS裡是沒有函數重載的,只能自己手寫判斷,比如查詢操作find函數,可以根據參數的不同進行重載,根據參數的個數判斷,來確實是不是要對查詢的結果進行排序,分頁,跳過和限制。
- 微博的展示部分,用到了underscore.js,由於和ejs的模版標記重合了,我修改了underscore的源碼,把模版標記<%%>變成了{{}}。全部微博展示的處理中,因為使用者的資訊是存在user集合裡,微博存在posts集合裡,mongo不像mysql傳統關係型資料庫那樣,是沒有外鍵的,我get所有微博的時候查詢的是posts集合,posts集合裡沒有存使用者的頭像,我要想在全部微博裡顯示使用者的頭像,只好採用雙重AJAX回調,第一層擷取到所有說說,第二層在迭代器中,這個迭代器是一個遞迴,為了分頁效果,用迭代器實現了閉包,這是JS的坑誰用誰知道。(當然ES6可以輕鬆解決這個問題),迭代器獲得第一層回調結果的username,再查詢擷取到頭像,再合并到第一個查詢結果。
- 還有其他的一些東西什麼的感興趣可以fork,clone 看源碼。
待改進
微博的評論,點贊功能,每個微博的首頁功能等等,能填的坑還有很多,不過大體架構寫好了,開源出來也是希望大家能一起加功能。
結語
這個項目用來練習Node比較好了,代碼注釋寫的很多,如果本項目對您有一絲絲的小協助,求個star,也歡迎fork,一起加上更多功能。
DEMO
代碼:
GitHub倉庫
有的問題可以評論,Issue,或者加扣扣1104272319聯絡我。
基於Node和MongoDB的Web微博系統