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