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 相关文章推荐
js中window.open()的所有参数详细解析
Jan 09 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
Jun 06 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
js实现上传图片预览方法
Oct 25 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
Vue实现搜索结果高亮显示关键字
May 28 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
vue实现分页的三种效果
Jun 23 Javascript
vue递归获取父元素的元素实例
Aug 07 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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php查询及多条件查询
2017/02/26 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
javascript定义函数的方法
2010/12/06 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
公司新员工的演讲稿注意事项
2014/01/01 职场文书
企业内控岗位的职责
2014/02/07 职场文书
岗位工作说明书
2014/07/29 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
Go获取两个时区的时间差
2022/04/20 Golang