每次以為看懂了的東西姐帚,回過頭再來看一遍的時候又懵圈了,我總是這么佩服自己铺根!正如上一節(jié)業(yè)務(wù)邏輯部分宪躯,我以為我真的看懂了,但今天看到控制器部分的時候真的傻眼了位迂,代碼差不多呀访雪,這又有啥不同呢,差別在哪里掂林,之間又有啥關(guān)聯(lián)臣缀,一連串的問號,帶著這些疑問再來學(xué)習(xí)泻帮。
繼續(xù)上一章所理解的肝陪,MVC中的C指的就是控制器,在我們學(xué)習(xí)的項(xiàng)目--實(shí)現(xiàn)圖片交換功能里刑顺,對應(yīng)的就是 ~-controller.js 和~-routes.js 這兩個文件模塊,下面分別來理解這兩個文件中的代碼饲常。
控制器 (controller.js)
先來對比一下以下兩個文件的代碼:
看了好幾遍蹲堂,似乎從心理上理解了這兩個相似文件的區(qū)別在哪里了。
- 首先贝淤,這兩個模塊文件存在的意義是不一樣的柒竞,意即他倆的作用是不一樣的,雖然它們申明的功能中都包括基本的數(shù)據(jù)操作CRUD播聪,但image-manager.js只對服務(wù)器中數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行CRUD處理朽基,而image-controller.js主要針對客戶端中的請求進(jìn)行的CRUD處理,甚至這其間還可能調(diào)用到image-manager.js模塊進(jìn)行深層的處理离陶。也不知道理解得對不對稼虎,不對請老師指正呵。
- 其次招刨,這兩個模塊文件工作的原理是不一樣的霎俩,比如在controller.js文件中,每一個函數(shù)都包括(req, res, next)這幾個參數(shù),從客戶端中接收用get/post方式發(fā)出的請求打却,不需要加工處理的直接從服務(wù)器端里調(diào)用對應(yīng)的數(shù)據(jù)返回杉适,需要服務(wù)器進(jìn)行加工處理的請求則需轉(zhuǎn)給業(yè)務(wù)邏輯層,即調(diào)用 manager.js 模塊進(jìn)行深處理后再返回柳击。而 manager.js 文件中的函數(shù)所包含的參數(shù)只存在于數(shù)據(jù)庫中猿推。
路由 (routes.js)
MVC 中的路由,就是路徑和 Controller 的對應(yīng)關(guān)系捌肴。怎么體現(xiàn)的蹬叭,還是來解析其代碼。
老師在教程中寫了兩點(diǎn)定義路由的注意事項(xiàng):
1,路由的定義和匹配哭靖,是按** HTTP **方法(get/post) + **URL **兩者來標(biāo)識的具垫。這個不難理解,如代碼里頭的method,path 申明的內(nèi)容试幽。
2,路由定義的順序是有講究的筝蚕。在 module.exports.routes 數(shù)組里面,URL 和 Controller 的對應(yīng)關(guān)系铺坞,是按順序注冊到 Express 框架里面的起宽。所以,如果一不小心济榨,順序安排不當(dāng)坯沪,前端發(fā)起的請求很可能就被意料之外的 Controller 攔截。
問題:這個就難理解了擒滑,這個順序指的是什么腐晾?是指發(fā)起請求的邏輯順序嗎?比如代碼中前兩個都是打開圖片詳情頁的路徑丐一,第三個才是打開圖片列表頁的路徑藻糖,但是正常不是先打開圖片列表頁,再在圖片列表頁中再打開某張圖片的詳情頁嗎库车?why?