迄今爲止個人那個小網站已經發布到網上了,然而功能還在迭代中,真的提及來的話,如今距離1.0版本的發佈,還差50%。如今記錄一下以前作的一些內容,以及一些技術路線方面的改進吧:前端
首先,這是一個用於我我的統計研究和展現的網站,當前的核心是一個CMS系統,想要統計用戶發佈信息的關鍵詞與情感趨勢java
最初的想法是在zuiwan.org的基礎上,作一個二級網站。因此在服務端技術架構上,依然沿用主站的NODE+EXPRESS的方法,服務器沒有采用一直使用的MongoDB,而是換成了MySQL,也方便後期上Java或者PHP。mysql
前端架構上,也沒有采用主站的VUE,而是沿用了我更加熟練的NG1.5。sql
服務端結構:express
Index->Router->Model->DAO->MySQL => HTTP型api訪問流
Index->static => 靜態頁面訪問流
Index->socket.io Handler->Model->DAO->MySQL => socket接口訪問流編程
最初是沒有socket.io的,當時試圖直接用普通的HTTP接口來實現,可是實時性須要用計時器來輪訓,後來考慮到後期擴展,直接使用了socket.io。api
model層最初被用來作黏合,接收的是req,res,而後直接在model層作了res.end()。可是後期在擴展socket的時候發現,這樣會致使耦合度激增。因而改成了,接收data,cb,而後把通用的response體扔給cb的形式。服務器
在以前的設計裏,我一直不知道model層該如何設計,爲什麼router不能直接與dao進行調度和數據交換。而後看到他們的java實體類——天了嚕,爲什麼一個Model要對應一個dao,這豈不是更沒有道理了。session
後來我真正開始本身的寫法的時候,就找到了一點點思路——好比用戶模塊,一方面對上層接受的是路由過來的各類相關方法,一方面,並不僅是對應一個user的Dao方法,其實涉及到不少個dao,好比token、relation等等。而token這個dao,也不可能單獨拿一個Model去對應。——這是個人思路。架構
這麼說來,其實我是少了Controller層。感受java裏Model封裝了dao以後,在Controller裏調用了各個Model。可是我暫時尚未找到這樣的優點。因此仍是沿用本身的思路吧。
另外,在與MySQL交互的時候,我抽取了一個dao的封裝,暴露了一個query方法,做爲各個dao的根基,上面的dao就只須要寫dao.query(str, cb)就行了。
前端:
標準的NG1.5+UI-Router,BS作了上層樣式展示。只是我一直用不慣UI.BootStrap。致使我如今還在用BS苦苦支撐。
Socket對接沿用了以前的代碼、service用來存儲全局變量。每一個頁面進入時須要調用session檢查。
其餘的無甚好說了。
經驗教訓:
1.NodeJS編程中,接口的回調參數,默認是err, data。以方便錯誤處理。
2.NG-repeat是支持子變量過濾的,自動的。
3.新學了express-session。
4.mysql包的鏈接池,不關閉,最多10個鏈接,多了會爆掉。