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 相关文章推荐
5分钟理解JavaScript中this用法分享
Nov 09 Javascript
flash遮住div问题的正确解决方法
Feb 27 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
JavaScript提高性能知识点汇总
Jan 15 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
JSON创建键值对(key是中文或者数字)方式详解
Aug 24 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
cropper js基于vue的图片裁剪上传功能的实现代码
Mar 01 Javascript
javascript实现拖拽碰撞检测
Mar 12 Javascript
JavaScript实现雪花飘落效果
Dec 27 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 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
php 中文处理函数集合
2008/08/27 PHP
一个PHP的String类代码
2010/04/20 PHP
PHP学习 变量使用总结
2011/03/24 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
Yii实现简单分页的方法
2016/04/29 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
15 个 JavaScript Web UI 库
2010/05/19 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
flask框架中的cookie和session使用
2021/01/31 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
经典c++面试题三
2015/07/08 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
校园安全教育广播稿
2014/02/17 职场文书
小学四年级学生评语
2014/12/26 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python