node架構系列--基礎架構的介紹

一個好的技術架構,能夠幫助研發人員高效的開發和定位問題,此係列是我總結的組內的node架構。此架構是通過時間和用戶的驗證,因此存在穩定性和合理性都。但也可能我在簡化架構的時候埋下一些坑,歡迎你們提出。node

做爲一個「服務端」,最重要的功能就是就是接受請求與返回響應了。系列的第一篇,就是介紹架構和創建一個能跑起來的服務。json

架構設計

clipboard.png

一個程序,分幾個模塊
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) => {
    
})

這一篇介紹了各個層的定義,下一篇結合代碼,創建起系統工具

相關文章
相關標籤/搜索