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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
用javascript自动显示最后更新时间
Mar 15 Javascript
js的Prototype属性解释及常用方法
May 08 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
js判断所有表单项不为空则提交表单的实现方法
Sep 09 Javascript
JS SetInterval 代码实现页面轮询
Aug 11 Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
基于JavaScript实现单例模式
Oct 30 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实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
JavaScript中this的使用详解
2013/11/08 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
涉外文秘个人求职的自我评价
2013/10/07 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
优秀党支部事迹材料
2014/01/14 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
初中生毕业评语
2014/12/29 职场文书
新教师教学工作总结
2015/08/14 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
SQL注入的实现以及防范示例详解
2021/06/02 MySQL