每次以为看懂了的东西,回过头再来看一遍的时候又懵圈了,我总是这么佩服自己!正如上一节业务逻辑部分,我以为我真的看懂了,但今天看到控制器部分的时候真的傻眼了,代码差不多呀,这又有啥不同呢,差别在哪里,之间又有啥关联,一连串的问号,带着这些疑问再来学习。
继续上一章所理解的,MVC中的C指的就是控制器,在我们学习的项目--实现图片交换功能里,对应的就是 ~-controller.js 和~-routes.js 这两个文件模块,下面分别来理解这两个文件中的代码。
控制器 (controller.js)
先来对比一下以下两个文件的代码:
看了好几遍,似乎从心理上理解了这两个相似文件的区别在哪里了。
- 首先,这两个模块文件存在的意义是不一样的,意即他俩的作用是不一样的,虽然它们申明的功能中都包括基本的数据操作CRUD,但image-manager.js只对服务器中数据库中的数据进行CRUD处理,而image-controller.js主要针对客户端中的请求进行的CRUD处理,甚至这其间还可能调用到image-manager.js模块进行深层的处理。也不知道理解得对不对,不对请老师指正呵。
- 其次,这两个模块文件工作的原理是不一样的,比如在controller.js文件中,每一个函数都包括(req, res, next)这几个参数,从客户端中接收用get/post方式发出的请求,不需要加工处理的直接从服务器端里调用对应的数据返回,需要服务器进行加工处理的请求则需转给业务逻辑层,即调用 manager.js 模块进行深处理后再返回。而 manager.js 文件中的函数所包含的参数只存在于数据库中。
路由 (routes.js)
MVC 中的路由,就是路径和 Controller 的对应关系。怎么体现的,还是来解析其代码。
老师在教程中写了两点定义路由的注意事项:
1,路由的定义和匹配,是按** HTTP **方法(get/post) + **URL **两者来标识的。这个不难理解,如代码里头的method,path 申明的内容。
2,路由定义的顺序是有讲究的。在 module.exports.routes 数组里面,URL 和 Controller 的对应关系,是按顺序注册到 Express 框架里面的。所以,如果一不小心,顺序安排不当,前端发起的请求很可能就被意料之外的 Controller 拦截。
问题:这个就难理解了,这个顺序指的是什么?是指发起请求的逻辑顺序吗?比如代码中前两个都是打开图片详情页的路径,第三个才是打开图片列表页的路径,但是正常不是先打开图片列表页,再在图片列表页中再打开某张图片的详情页吗?why?