Moa-api:一個基于node express快速開發api類后端的框架
目前是讓開發可以快速的開發api類后端,開箱即用,可以最大程度發揮node express的威力
技術棧
- express
- mongoose
- bluebird
- res.api
Features
- 自動加載路由
- 支持mongodb配置
- 集成mongoosedao,快速寫crud等dao接口
- 自帶用戶管理
- 使用jsonwebtoken做用戶鑒權
- 支持migrate測試
- 支持mocha測試
- 默認集成res.api,便于寫接口
- 集成supervisor,代碼變動,自動重載
- gulp自動監控文件變動,跑測試
- gulp routes生成路由說明
開發流程
- 確定models內容,如果是已有庫或已有模型,可以直接使用
- 編寫接口文檔
- 通過migrate來測試model里的方法(如果測試熟悉,可以直接寫測試)
- 通過supertest來測試接口(R層)是否合法
- 通過mocha測試其他業務代碼(C層、S層、M層)
RCSM分層思想
R = routes
路由層,和express的一樣,唯一不一樣的是只要是在app/routes下面的js都會自動掛載到路由上。
比如app/routes/user.js,它的訪問地址是
比如app/routes/api/user.js,它的訪問地址是
http://127.0.0.1:3000/api/user
然后路由里面的子地址,參照express路由寫法即可。
典型用法是
var express = require('express'); var router = express.Router(); var $ = require('mount-controllers')(__dirname).users_controller; /* GET users listing. */ router.get('/login', $.api.login); router.get('/register', function(req, res, next) { return res.api(200,{ a:'register' }); }); module.exports = router;
從使用上來說,router.get('/login', $.api.login);這個是最合理最常用的的。
但如果是邏輯非常簡單的路由,隨便寫寫也無妨
C = controllers
控制層,主要是負責接口處理結果如何返回,異常如何處理等邏輯控制,不處理具體邏輯
var users_service = require('mount-services')(__dirname).users_service; // -- custom api exports.api = { login: function (req, res, next) { // var user_id = req.api_user._id; var is_valid = users_service.login_valid('sang', '000000'); if(is_valid == true){ return res.api(200,{ a:'login true' }); }else{ return res.api(200,{ a:'login false ' }); } } }
說明:控制層的代碼只會在R層里用到
S = services
業務邏輯層,通常業務比較負責才會用到業務邏輯層的,如果是單表能處理的,就沒有必要使用services層了,所以S層通常是多個models操作的業務邏輯,為了邏輯清晰,以及防止C層膨脹,和耦合,S層很多時候是必要的。
說明:S層只會出現在C層代碼里,是對多個models操作的封裝。
M = models
模型層,也就是我們常說的dao層,即data access object,這里采用mongoose + mongoosedao完成model層建模
說明:M層可能出現在S層或C層,不允許出現在其他位置
本文由用戶 eg756 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!