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实现点击链接弹出"图片另存为"而不是直接打开
Aug 15 Javascript
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
JavaScript的parseInt 进制问题
May 07 Javascript
Jquery时间验证和转换工具小例子
Jul 01 Javascript
JavaScript中setAttribute用法介绍
Jul 20 Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 Javascript
Jquery实现上下移动和排序代码
Oct 17 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
详解小程序云开发数据库
May 20 Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 06 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
May 08 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
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
JsRender实用入门教程
2014/10/31 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Python 函数基础知识汇总
2018/03/09 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
C面试题
2015/10/08 面试题
师范生个人推荐信
2013/11/29 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
学习十八大标语
2014/10/09 职场文书
优秀教研组申报材料
2014/12/26 职场文书
英文升职感谢信
2015/01/23 职场文书
党员进社区活动总结
2015/05/07 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
Python 用户输入和while循环的操作
2021/05/23 Python