基於Node和MongoDB的Web微博系統

來源:互聯網
上載者:User

標籤:one   使用者   迭代器   代碼   mysq   post   結構   hub   phi   

基於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層了。

安裝依賴
"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

功能和實現
  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 看源碼。
待改進

微博的評論,點贊功能,每個微博的首頁功能等等,能填的坑還有很多,不過大體架構寫好了,開源出來也是希望大家能一起加功能。

結語

這個項目用來練習Node比較好了,代碼注釋寫的很多,如果本項目對您有一絲絲的小協助,求個star,也歡迎fork,一起加上更多功能。

DEMO

代碼:

GitHub倉庫

有的問題可以評論,Issue,或者加扣扣1104272319聯絡我。

基於Node和MongoDB的Web微博系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.