一个好的技术架构,可以帮助研发人员高效的开发和定位问题,此系列是我总结的组内的node架构。此架构是经过时间和用户的验证,所以存在稳定性和合理性都。但也可能我在简化架构的时候埋下一些坑,欢迎大家提出。
作为一个“服务端”,最重要的功能就是就是接受请求与返回响应了。系列的第一篇,就是介绍架构和建立一个能跑起来的服务。
架构设计
一个程序,分几个模块
util-工具
middleware-自定义中间件
model-模型
service-各种服务接口
controller层-处理业务
router-路由层
-apis(method, path, controller, role, des)
-page(path,controller,view, role, des)
可以看到一个请求进来
1、首先会通过路由层,匹配不到路由响应404
2、middleware层是中间件层,主要用于是各种请求通用处理逻辑(登录态校验,权限校验,通用变量挂载等)
3、然后就到了controller层,真正处理这个请求。
4、处理完请求,如果是页面请求就返回视图,非就返回json数据。
5、而middleware层和controller层都会用到util工具类和logger日志管理这两个模块,这两个其实是独立于这个系统的,移到哪个系统都可用。
根据图可看到,controller层又会引用service层,service又会引用model层,来看个例子。
一个好的团队,应该会根据业务类型与紧密度进行分类。比如systemA系统负责与用户相关的,systemB系统负责文章相关的,systemC系统负责商品相关的。
1、这么多功能不会单单只有一个node系统负责,node也要不适合的场景,所以必然会发生系统与其他系统的交互。而系统也必然会做请求健全等。所以,有必要将请求交互封装成一个model。
而除了上述的model外,用户模型也能封装成一个model,文章模型也能封装成一个model,商品模型也能封装成一个model。
而且有model层还能做到,在一个地方写代买就能使使用方自动打logger。
2、有了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) => {
})
这一篇介绍了各个层的定义,下一篇结合代码,建立起系统
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。