一个好的技术架构,可以帮助研发人员高效的开发和定位问题,此系列是我总结的组内的node架构。此架构是经过时间和用户的验证,所以存在稳定性和合理性都。但也可能我在简化架构的时候埋下一些坑,欢迎大家提出。

作为一个“服务端”,最重要的功能就是就是接受请求与返回响应了。系列的第一篇,就是介绍架构和建立一个能跑起来的服务。

架构设计

clipboard.png

一个程序,分几个模块
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) => {
    
})

这一篇介绍了各个层的定义,下一篇结合代码,建立起系统


hwc282686
148 声望3 粉丝

争取更新一两篇文章啊