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 05 Javascript
基于jquery的direction图片渐变动画效果
May 24 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
jQuery的.live()和.die() 使用介绍
Sep 10 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
Jun 16 Javascript
Javascript 赋值机制详解
Nov 23 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 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/10 日漫
详解PHP导入导出CSV文件
2014/11/03 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
Javascript实现的分页函数
2007/02/07 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
pytorch 预训练层的使用方法
2019/08/20 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
师范毕业生自荐信
2013/10/17 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
浅谈Python中的正则表达式
2021/06/28 Python