日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

NodeJS学习笔记: RESTful —— 为本系列做个小结

發(fā)布時(shí)間:2025/7/14 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NodeJS学习笔记: RESTful —— 为本系列做个小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

本人不是技術(shù)專家,該筆記只是從使用語(yǔ)言進(jìn)行開(kāi)發(fā)的層面上記錄一些體會(huì),不包含也不想嘗試從源碼或者更深的層次去討論語(yǔ)言本身的優(yōu)劣。文章內(nèi)容是筆者的個(gè)人感悟,既不保證正確性,也不保證別人能看懂。

這是該筆記的第三篇,用來(lái)對(duì)最近的NodeJS學(xué)習(xí)做一個(gè)小結(jié),短期內(nèi)恐怕我不會(huì)再更新它了。

第一篇在這里 NodeJS學(xué)習(xí)筆記: require, exports 和 module.exports 的初印象
第二篇在這里 NodeJS學(xué)習(xí)筆記: 簡(jiǎn)述Express的中間件multer的使用

先談一下本次學(xué)習(xí)的收獲:
1- 對(duì)于非阻塞模式的開(kāi)發(fā)有了相應(yīng)的意識(shí),即從覺(jué)得很難讀懂源碼到現(xiàn)在覺(jué)得一切本該如此,這說(shuō)明我的思維方式改善了。
2- NodeJS是很有趣的東西,但是暫時(shí)不適于開(kāi)發(fā)商業(yè)的應(yīng)用。誠(chéng)然,NodeJS與Express都提供了較好的技術(shù)支持與規(guī)范的源碼,但是太多來(lái)自npm的模塊做不到這一點(diǎn),也就是說(shuō)如果不去更新依賴的資源那么可能存在未知的bug,而更新的代價(jià)則是發(fā)生各種錯(cuò)誤。
3- 綜上,我覺(jué)得angular之類的技術(shù)在相當(dāng)?shù)囊欢螘r(shí)期內(nèi)更有活力,至于后端我還是暫時(shí)要回到PHP領(lǐng)域。哦~PHP7

引子

學(xué)習(xí)NodeJS的原因是我在嘗試基于MeanJS框架的基礎(chǔ)上進(jìn)行開(kāi)發(fā),所以我要先熟悉NodeJS, ExpressJS 和 MongoDB。當(dāng)時(shí)使用的MeanJS框架是0.4.2,現(xiàn)在已經(jīng)有了0.5.beta了。其實(shí)我大約半年以前就接觸過(guò)這個(gè)框架的更早期版本,大致的感覺(jué)如下:

早期版本

在前端和后端分別實(shí)現(xiàn)了mvc架構(gòu),不錯(cuò)的封裝,但是使用上稍有不便。目錄結(jié)構(gòu)類似:

/app/modules/moduleA (比如articles)/controllers/models/services... /public/modules... (和上面差不多,不廢話了)

0.4.2

結(jié)構(gòu)改善了,看起來(lái)舒服多了

/modules/moduleA (比如articles) /client.../server.../test...

當(dāng)然實(shí)際開(kāi)發(fā)的時(shí)候太多的近似名稱也是挺讓人頭疼了。

0.5.beta

前端貌似做了一些優(yōu)化,后端沒(méi)什么太多的變動(dòng)。以前的示例代碼只有oauth, users (包含頭像上傳), menu 和 articles,現(xiàn)在又增加了chat。新手其實(shí)可以fork它從而更快的入手。

正文

我覺(jué)得單獨(dú)評(píng)價(jià)RESTful的話并沒(méi)有什么價(jià)值,必須考慮和angularJS或者app開(kāi)發(fā)結(jié)合的情況下。雖然如Mongo之類的數(shù)據(jù)庫(kù)實(shí)現(xiàn)了RESTful接口,但是我覺(jué)得沒(méi)人喜歡從瀏覽器端直接發(fā)起此類請(qǐng)求。
對(duì)于單純的RESTful,我覺(jué)得以下就夠了:

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來(lái)制定數(shù)據(jù)有效性規(guī)則和規(guī)定model對(duì)應(yīng)的訪問(wèn)規(guī)則就可以了。

尾聲

抽象RESTful框架其實(shí)是很簡(jiǎn)單的,一個(gè)針對(duì)RESTful請(qǐng)求的后端框架應(yīng)該包括以下的部分:
1-安全驗(yàn)證:確認(rèn)訪問(wèn)者的身份保證安全的訪問(wèn)
2-數(shù)據(jù)讀寫(xiě):包括數(shù)據(jù)庫(kù)部分和緩存部分
3-文件處理:能夠?qū)ξ募蟼鬟M(jìn)行處理
4-易于擴(kuò)展的接口:比如socket支持,現(xiàn)在用來(lái)越多的地方用到了;oauth,網(wǎng)上支付接口等。
1和2是必不可少的。

好了,就這樣,我要回去研究php了。

總結(jié)

以上是生活随笔為你收集整理的NodeJS学习笔记: RESTful —— 为本系列做个小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。