一、關於重複造輪子解釋下
在
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=資料庫名 複製程式碼