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/jquery对上传文件格式过滤的方法
Jul 25 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
Jan 17 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
Mar 02 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
jquery对象访问是什么及使用方法介绍
May 03 Javascript
浅析JS异步加载进度条
May 05 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
vue中实现滚动加载更多的示例
Nov 08 Javascript
原生js实现表格翻页和跳转
Sep 29 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
PHP概述.
2006/10/09 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python实现多行注释的另类方法
2014/08/22 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
爱国口号
2014/06/19 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
清洁员岗位职责
2015/02/15 职场文书
综合办公室岗位职责
2015/04/11 职场文书