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中eval函数的使用方法与示例
Apr 09 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 Javascript
JavaScript中双叹号(!!)作用示例介绍
Apr 10 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
基于jquery实现五星好评
Nov 18 jQuery
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 Javascript
浅谈Vue 函数式组件的使用技巧
Jun 16 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 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
PHP如何防止用户重复提交表单
2020/12/09 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
nodejs aes 加解密实例
2018/10/10 NodeJs
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
改进Django中的表单的简单方法
2015/07/17 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python实现的选择排序算法示例
2017/11/29 Python
OpenCV 模板匹配
2019/07/10 Python
Django model select的多种用法详解
2019/07/16 Python
在pycharm中实现删除bookmark
2020/02/14 Python
包装类的功能、种类、常用方法
2012/01/27 面试题
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
大学学年自我鉴定
2013/10/28 职场文书
幼师自我鉴定
2014/02/01 职场文书
体育专业求职信
2014/07/16 职场文书
户籍证明书标准模板
2014/09/10 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL