koa大型web项目中使用路由装饰器的方法示例


Posted in Javascript onApril 02, 2019

一、关于重复造轮子解释下

在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=数据库名

四、源码地址,欢迎小伙伴提出问题,方便点赞一个

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript实现画板的代码
Sep 05 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
使用javascript提交form表单方法汇总
Jun 25 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
Bootstrap源码解读排版(1)
Dec 23 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 #Javascript
Seajs源码详解分析
Apr 02 #Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 #Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 #Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 #Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 #Javascript
详解vue后台系统登录态管理
Apr 02 #Javascript
You might like
收集的php编写大型网站问题集
2007/03/06 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
php中yii框架实例用法
2020/12/22 PHP
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
python 同时读取多个文件的例子
2019/07/16 Python
python Tensor和Array对比分析
2020/01/08 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
职称自我鉴定
2013/10/15 职场文书
年度考核自我鉴定
2014/03/19 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
小学班主任工作随笔
2015/08/15 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP