Moa-api:一個基于node express快速開發api類后端的框架

eg756 9年前發布 | 23K 次閱讀 Moa-api Node.js 開發

目前是讓開發可以快速的開發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,它的訪問地址是

http://127.0.0.1:3000/user

比如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層,不允許出現在其他位置

項目主頁:http://www.baiduhome.net/lib/view/home/1438783785958

 本文由用戶 eg756 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!