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 字符串转换成数字的三种方法
Mar 23 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
上传文件返回的json数据会被提示下载问题解决方案
Dec 03 Javascript
js的toLowerCase方法用法实例
Jan 27 Javascript
JavaScript实现的encode64加密算法实例分析
Apr 15 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
Angularjs处理页面闪烁的解决方法
Mar 09 Javascript
JS二分查找算法详解
Nov 01 Javascript
mac中利用NVM管理不同node版本的方法详解
Nov 08 Javascript
js canvas实现红包照片效果
Aug 21 Javascript
jQuery属性选择器用法实例分析
Jun 28 jQuery
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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
Python中文竖排显示的方法
2015/07/28 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
Python 字符串与数字输出方法
2018/07/16 Python
python操作excel的方法
2018/08/16 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
2015年教师节活动总结
2015/03/20 职场文书
追悼会家属答谢词
2015/09/29 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python