一个好的技术架构,能够帮助研发人员高效的开发和定位问题,此系列是我总结的组内的node架构。此架构是通过时间和用户的验证,因此存在稳定性和合理性都。但也可能我在简化架构的时候埋下一些坑,欢迎你们提出。node
做为一个“服务端”,最重要的功能就是就是接受请求与返回响应了。系列的第一篇,就是介绍架构和创建一个能跑起来的服务。json
一个程序,分几个模块 util-工具 middleware-自定义中间件 model-模型 service-各类服务接口 controller层-处理业务 router-路由层 -apis(method, path, controller, role, des) -page(path,controller,view, role, des)
能够看到一个请求进来
一、首先会经过路由层,匹配不到路由响应404
二、middleware层是中间件层,主要用因而各类请求通用处理逻辑(登陆态校验,权限校验,通用变量挂载等)
三、而后就到了controller层,真正处理这个请求。
四、处理完请求,若是是页面请求就返回视图,非就返回json数据。
五、而middleware层和controller层都会用到util工具类和logger日志管理这两个模块,这两个实际上是独立于这个系统的,移到哪一个系统均可用。api
根据图可看到,controller层又会引用service层,service又会引用model层,来看个例子。
一个好的团队,应该会根据业务类型与紧密度进行分类。好比systemA系统负责与用户相关的,systemB系统负责文章相关的,systemC系统负责商品相关的。
一、这么多功能不会单单只有一个node系统负责,node也要不适合的场景,因此必然会发生系统与其余系统的交互。而系统也必然会作请求健全等。因此,有必要将请求交互封装成一个model。
而除了上述的model外,用户模型也能封装成一个model,文章模型也能封装成一个model,商品模型也能封装成一个model。
并且有model层还能作到,在一个地方写代买就能使使用方自动打logger。
二、有了model层,为何还须要service层呢?service能够具体到业务。好比,service层的接口,能够是用户更名、用户修改级别、文章发布、文章评论等。
实际上是否须要细分到service和model,就看model分得多细了。举个例子架构
//Model systemA.js const md5 = require('md5') const request = require('request') class systemA { constructor() { } request(opts, cb) { var time = new Date(); var sign = md5(time+'secret_key') if(opts.qs) opts.qs._sign = sign; request(opts, (err, res, data) => { if(err) { cb(err) }else { cb(null, data) } }) } } module.exports = systemA //Service user.js const api = require('../model/systemA') api.request({ url: 'http://127.0.0.1:8000/home', qs: {a: 6} }, (err, data) => { })
这一篇介绍了各个层的定义,下一篇结合代码,创建起系统工具