我本是一名文科專業半路出家的前端開發人員,從最初只會切圖和寫CSS、Html到現在會寫點JS,一路坑坑洼洼,也是經歷了很多,從2010年開始就用WordPress開設了自己的博客,雖然內容零零散散的并不多,但是多多少少也留下了時光的縮影,一直希望自己有一個自留地。用Node.js做服務端替換WordPress是去年的一個想法,由于一直騰不出時間,所以拖到了現在。當然了WordPress作為全球用戶量最廣的開源博客程序,易用性等諸多好處無可厚非,光自己的博客在過去幾年就用了很多套模板,也用它做過很多不同風格不同功能的網站, 也許Node.js不是個人博客的最好的開發語言選擇,不管是情懷還是其他,我相信一定有前端開發人員跟我一樣有想過這樣的嘗試。市面上開源的博客程序很多,UI模板也相當漂亮,但是自己開發一個屬于自己的博客程序,沒事的時候折騰折騰,可能會是一件比較美好的事情,最主要的目的是在其折騰的過程中,可以多嘗試服務端的功能開發,這對從一個純前端轉向全棧開發工程師是非常好的實踐。 git上面有很多開源的Node.js源碼,教程也比較詳細,有的功能全面,有的相對簡約,當然每個人只要選擇適合自己的就好,下面簡單介紹下我的項目,從技術角度而言,深度有限,大神多提意見。
架構
項目沿用傳統的MVC,比較古老的架構,model(對象模型),view(視圖),controller(控制器),model通俗的說就是數據庫表字段的映射,view就是界面,UI,controller就是操作數據庫,一般是接收到路由信息,然后對數據庫進行操作,再把數據返回給view層。如果是熟悉后端的開發人員可能一眼就看的懂,不過對于沒有做過后端開發的純前端人員來說,可能需要一些時間去消化。想起我第一次做全棧開發,一個存儲CCTV配置數據的項目,基于c#和sqlserver,也是標準的MVC架構,很簡單的增刪改查,是廢了不少功夫。
數據庫
數據庫這塊用的MongoDB,為什么用它,因為簡單好用,再就是它是在非關系數據中功能最豐富,最像關系數據庫的。操作數據庫的工具用了mongoose,api易讀,很容易上手。之前是wordpress用的mysql,導出數據到MongdoDB確實沒什么特別的好的方法和工具,嘗試用了一些工具和腳本,效率不高,最后還是手工完成的,好在本人比較懶,那么多年沒幾篇內容。
WEB框架和模板
后端用了Express的web框架,頁面渲染部分是handlebars模板,個人感覺{{}}大括號的寫法比較適合前端開發人員,但是handlebars模板是個弱邏輯語言,有一些不方便,需要helper,特別是分頁和評論,邏輯特別復雜,不過如果你喜歡hb模板,可以去git上下helper的庫。jade模板(現在改成pug了)會比較方便一些,對一些復雜邏輯的處理比較高效,主要是可以直接在模板中寫js語法,但是縮進的寫法不是每個前端開發都能習慣的。
前端
如今的前后端分離,MV*框架,工程化,模塊化,這些概念大行其道,如果一個做前端的不知道這幾個概念,恐怕工作都難找到。但是這個項目沒有前后端分離,直接在后端渲染頁面,也沒有用MVVM框架,工程化和模塊化就更不用說了,后臺頁面用了一個jQuery和BootStrap和一些插件,前臺頁面好像就一個jQuery,CSS基本手寫,我相信前端開發人員看到會比較親切。我的初衷是希望通過這個項目了解更多后端開發思路和模式,其次個人博客是個傳播源,在后端渲染也是為了利于SEO。
原理
我這里簡單從一個頁面打開到完全加載,程序做了哪些事去論述一下整個項目工作原理,當你打開博客的一個頁面,node.js在后端通過路由機制(express提供的路由模塊)去匹配到這個頁面的url,然后查找對應的controller(就是處理這個URL的函數),在這個controller函數中,對數據庫進行一些過濾篩選(用mongoose對數據庫進行操作)最終拿到頁面需要的數據,然后再把數據傳遞給對應的模板(handlebars),最終渲染成HTML。
由于時間倉促,博客的功能可能比較簡陋,但是基本的功能已經滿足了,另外項目也有很多沒用到的函數和接口,來不及整理,留待以后擴展吧。?博客demo這是我的博客git地址https://github.com/frogo/blog,歡迎大家star和fork,