一個好的技術架構,能夠幫助研發人員高效的開發和定位問題,此係列是我總結的組內的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) => { })
這一篇介紹了各個層的定義,下一篇結合代碼,創建起系統工具