koa大型web專案中使用路由裝飾器

水痕001發表於2019-03-25

一、關於重複造輪子解釋下

npmjs上搜尋關於koa路由裝飾器的已經有那麼幾個包了,但是我從幾個包中發現作者的思維僅僅限制於前端開發的思想,專案分層不明確,我們開發kow-web專案可以根據java-web中專案分層的思想來寫專案,專案結構清晰明瞭,本人封裝這個包也是參考了java-web開發過程中把專案分為四層架構。

  • 1、controllers:路由的控制
  • 2、servers:常用於一些業務邏輯的判斷
  • 3、dao:運算元據庫的
  • 4、models:關於建表的資料模型

二、關於koa2-router-decors包的使用步驟

  • 1、構建一個專案,並建立分層目錄

  • 2、安裝

    npm install koa2-router-decors
    // or
    yarn add koa2-router-decors
    複製程式碼
  • 3、在中介軟體中使用我們安裝的包

    import { resolve } from 'path';
    import Route from 'koa2-router-decors';
    // 可以寫到config中統一配置
    const API_VERSION = '/api/v1';
    /**
     * @Description: 反轉路徑的方法
     * @param {String} 
     * @return: 
     */
    const dir = path => resolve(__dirname, path);
    
    /**
     * @Description: 路由中介軟體讀取controllers中的裝飾器配置
     * @param {type} 
     * @return: 
     */
    export default (app) => {
      // 這個地方是要讀取的資料夾目錄
      const apiPath = dir('../controllers/*');
      // 例項化類並呼叫方法
      const route = new Route(app, apiPath, API_VERSION);
      route.init();
    };
    複製程式碼
  • 4、使用中介軟體

  • 5、在controllers的資料夾中使用裝飾器

    @controller('/user')
    export class UserController extends BaseController {
      constructor() {
        super();
      }
      /**
       * 
       * @api {post} /api/v1/user/create/ 新增使用者
       * @apiDescription 建立使用者的介面
       * @apiName createUser
       * @apiGroup users
       * @apiVersion  0.1.0
       * @apiParam {string} username="張三" 使用者名稱
       * @apiParam {string} mobile 手機號碼
       * @apiParam {string} email 郵箱
       * @apiParam {string} password 密碼
       */
      @post('/create')
      @required({ body: ['username', 'mobile', 'password'] })
      async createUser(ctx) {
        const result = await UserServer.createUser(ctx.request.body);
        ctx.success(result);
      }
      ....
    }
    複製程式碼
  • 6、具體程式碼可以參考example中寫的

三、關於example程式碼跑起來的說明

  • 1、使用的是mysql

  • 2、mysql建表sql

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(30) NOT NULL,
      `mobile` varchar(11) DEFAULT NULL,
      `email` varchar(20) DEFAULT NULL,
      `password` varchar(255) NOT NULL,
      `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
      `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
    複製程式碼
  • 3、在example的根目錄下建立一個.env的檔案

    DB_HOST=資料庫地址
    DB_USERNAME=資料庫連線名
    DB_PASSWORD=資料庫連線密碼
    DB_DATABASE=資料庫名
    複製程式碼

四、原始碼地址,歡迎小夥伴提出問題,方便點贊一個

相關文章