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编程起步(第二课)
Jan 10 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
Aug 05 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
node 版本切换的实现
Feb 02 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 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
第十四节 命名空间 [14]
2006/10/09 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
php魔术变量用法实例详解
2014/11/13 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
TensorFlow变量管理详解
2018/03/10 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
咖啡店自主创业商业计划书
2014/01/22 职场文书
销售个人求职信范文
2014/04/28 职场文书
体育节口号
2014/06/19 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
教师党员自我评价2015
2015/03/04 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
Redis基本数据类型Set常用操作命令
2022/06/01 Redis