本人不是技術專家,該筆記只是從使用語言進行開發的層面上記錄一些體會,不包含也不想嘗試從源碼或者更深的層次去討論語言自己的優劣。文章內容是筆者的我的感悟,既不保證正確性,也不保證別人能看懂。php
這是該筆記的第三篇,用來對最近的NodeJS學習作一個小結,短時間內恐怕我不會再更新它了。前端
第一篇在這裏 NodeJS學習筆記: require, exports 和 module.exports 的初印象
第二篇在這裏 NodeJS學習筆記: 簡述Express的中間件multer的使用git
先談一下本次學習的收穫:
1- 對於非阻塞模式的開發有了相應的意識,即從以爲很難讀懂源碼到如今以爲一切本該如此,這說明個人思惟方式改善了。
2- NodeJS是頗有趣的東西,可是暫時不適於開發商業的應用。誠然,NodeJS與Express都提供了較好的技術支持與規範的源碼,可是太多來自npm的模塊作不到這一點,也就是說若是不去更新依賴的資源那麼可能存在未知的bug,而更新的代價則是發生各類錯誤。
3- 綜上,我以爲angular之類的技術在至關的一段時期內更有活力,至於後端我仍是暫時要回到PHP領域。哦~PHP7github
學習NodeJS的緣由是我在嘗試基於MeanJS框架的基礎上進行開發,因此我要先熟悉NodeJS, ExpressJS 和 MongoDB。當時使用的MeanJS框架是0.4.2,如今已經有了0.5.beta了。其實我大約半年之前就接觸過這個框架的更早期版本,大體的感受以下:數據庫
在前端和後端分別實現了mvc架構,不錯的封裝,可是使用上稍有不便。目錄結構相似:npm
/app /modules /moduleA (好比articles) /controllers /models /services ... /public /modules ... (和上面差很少,不廢話了)
結構改善了,看起來舒服多了segmentfault
/modules /moduleA (好比articles) /client ... /server ... /test ...
固然實際開發的時候太多的近似名稱也是挺讓人頭疼了。後端
前端貌似作了一些優化,後端沒什麼太多的變更。之前的示例代碼只有oauth, users (包含頭像上傳), menu 和 articles,如今又增長了chat。新手其實能夠fork它從而更快的入手。瀏覽器
我以爲單獨評價RESTful的話並無什麼價值,必須考慮和angularJS或者app開發結合的狀況下。雖然如Mongo之類的數據庫實現了RESTful接口,可是我以爲沒人喜歡從瀏覽器端直接發起此類請求。
對於單純的RESTful,我以爲如下就夠了:緩存
var policy = { invokeRolesPolicies: function(){}, isAllowed: function(req, res, next){ var thePolicy = false; if (req.model) { if (req.model.policy) { thePolicy = req.model.policy; } else { thePolicy = require('default.restful.policy.js'); } thePolicy.invokeRolesPolicies(); retuen thePolicy.isAllowed(req, res, next); } return next(); } }; var RESTController= { this.save = function(req, res){}; this.delete= function(req, res){}; this.read = function(req, res){}; this.list = function(req, res){}; this.loadModel = function(req, res, next, modelName){ req.model = moogoose.model(modelName); next(); }; this.loadData = function(req, res, next, dataId){ req.data = req.model.findById(dataId); next(); }; } app .route('/rest/:model') .all(policy.isAllowed) .get(RESTController.list) .post(RESTController.save) ; app .route('/rest/:model/:id') .all(policy.isAllowed) .get(RESTController.read) .put(RESTController.save) .delete(RESTController.delete) ; app.param('model', RESTController.loadModel); app.param('id', RESTController.loadData);
而後只要增長model來制定數據有效性規則和規定model對應的訪問規則就能夠了。
抽象RESTful框架實際上是很簡單的,一個針對RESTful請求的後端框架應該包括如下的部分:
1-安全驗證:確認訪問者的身份保證安全的訪問
2-數據讀寫:包括數據庫部分和緩存部分
3-文件處理:可以對文件上傳進行處理
4-易於擴展的接口:好比socket支持,如今用來越多的地方用到了;oauth,網上支付接口等。
1和2是必不可少的。
好了,就這樣,我要回去研究php了。