设计
要实现一定项目结构,并不是把项目分几个文件夹就完事了的,项目结构设计的最终目的是降低系统的复杂度,一般设计时,总是把一个系统,分成几个小系统,每个小系统独自完成一个功能,并且要控制各个子系统之间的访问权限,在java中很容易通过包权限来实现。但nodejs只有模块,没有包权限,所以项目开始时要通过约定来实现包权限,约定就是大家编写代码时自觉遵守的规则,自觉很重要。遵守各个子系统之间的访问权限,不要越权。
因为数据具有多样性,而为了保证数据层对外表现的一致一致性,因为每个项目的数据模型都不同,选用的数据库也因此不同,为了保证model层对外的一致性,也为了保护数据,在model层之上加上一个代理层。所有数据的访问需通过代理层。
在mvc中model层对应的是网站的资源模型,模型并不能简单理解成数据库中的表,他是抽象的,它可以是一张图片,一个文件,一张数据库的表,或者是几张表和在一起。
目录结构
- bin
- controllers
- logs
- middlewares
- models
- proxy
- public
- services
- test
- views
- app.js
- config.js
- router.js
- package.js
express 请求响应流程
流程解析
上图的箭头代表着请求的流向或者访问的权限。
router:只做请求分发,没有业务逻辑
err是统一的错误处理位置,记录错误,统一err页面。
middlewares:业务中间件,如用户权限控制
model只能由它的proxy访问,而proxy能被controller和service访问。
controller主要逻辑处理
service作为项目的业务组件。如:redis连接服务,缓存组件,日志组件等,他可以减少controller的负担。
app:放一次性脚本
项目代码github