Vue2+Koa2+Typescript前后端框架教程--04班级管理示例(路由调用控制器)
上篇文章分享了简单的三层模式和基础文件夹的创建,本篇将以示例的形式详细具体的展示Router、Controller、Service、Model之间业务处理和数据传输。
1. 班级管理数据模型创建。数据模型是通过Sequelize的ORM技术实现,关于Sequelize技术,将在后续文章中分享。
在上篇文章中的models文件夹中创建班级模型class.ts,数据结构为:ID,班级名称,班级编码,班主任ID。代码如下:
import { Table, Model, Column, DataType, PrimaryKey } from "sequelize-typescript";
import DbSequelize from "../db_config";
@Table({
tableName: 't_class'
})
export default class Class extends Model<Class> {
//唯一标识
@Column({ type: DataType.STRING, primaryKey: true })
id: string;
//班级名称
@Column({ type: DataType.STRING, field: 'class_name' })
className: string;
//班级编码
@Column({ type: DataType.STRING, field: 'class_code' })
classCode: string;
//班主任Id
@Column({ type: DataType.STRING, field: 'head_teacher_id' })
headTeacherId: string;
}
DbSequelize.addModels([Class]);
注:由于尚未讲解Sequelize相关技术,所以这里只需要明白班级结构即可。
2.班级管理服务创建。在services文件夹中创建class.ts,实现最基础的增删改查的服务方法。代码如下:
import Class from '../models/class';
var Op = sequelize.Op; //班级管理服务
export default class ClassService {
//获取所有班级
async findClassList() {
try {
return Class.findAll({
attributes: ['id', 'calssName', 'calssCode', 'headTeacherId']
});
}
catch (err) {
throw (err);
}
} //获取单个班级
async findClassById(classId: string) {
try {
return Class.findOne({
attributes: ['id', 'calssName', 'calssCode', 'headTeacherId'],
where: { id: classId }
});
}
catch (err) {
throw (err);
}
} //删除班级
async deleteClass(classId: string) {
try {
return await Class.destroy({ where: { id: classId } });
}
catch (err) {
throw (err);
}
} //修改班级
async editClass(class: any) {
try {
return await Class.update(class, { where: { id: class.id }, individualHooks: true });
}
catch (err) {
throw (err);
}
} //添加班级
async addClass(class: any) {
try {
return await Class.create(class);
}
catch (err) {
throw (err);
}
}
}
注:由于尚未讲解Sequelize相关技术,所以这里只需要明白班级服务中基础的操作就是简单的增删改查即可,有关分页,复杂查询也将在后篇中分享。
3.班级管理控制器创建。在controllers文件夹中创建class.ts,实现最基础的增删改查的业务方法。代码如下:
注:此处的班级管理控制器,仅仅实现对增删改查服务的调用,后篇慢慢会添加班级对班主任信息的获取等相关业务逻辑的操作。
4. 设置路由
4.1 添加路由中间件
npm i koa-router
npm i @types/koa-router
4.2 在router.ts中,添加如下代码:
4.3 在app.ts中,添加路由中间件
const Koa = require('koa');
const app = new Koa();
//引入路由
import router from './router';
//添加路由中间件
app.use(router.routes());
app.use(router.allowedMethods());
app.use(async (ctx: any) => {
ctx.body = 'Hello World...Hello LaoLv';
});
console.log('app server start on port 3000...')
app.listen(3000);
这样,整个router--controller--service--model之间的数据调用基本完成,但是由于sequlize没有安装,大家如果直接复制代码会报错,所以,以上代码仅仅是一个熟悉了解整个过程。
下面,大家可以把model,service中的代码都注释掉,修改controller和router,简单运行一个路由作为举例。
controllers-->class.ts
//班级管理控制器
export default class ClassController {
//查找所有班级
static async findClassList(ctx: any) {
try {
ctx.body = {
status: 1,//返回码:1操作成功,0操作错误
data: {
classList: '这是测试数据'
}
}
}
catch (err) {
ctx.throw(err.message);
}
}
}
router.ts:
import KoaRouter from 'koa-router';
//引入班级管理控制器
import ClassController from './controllers/class'; const router = new KoaRouter();
router.get('/api/class/findClassList', ClassController.findClassList); export default router;
这样,代码就不会报错了,然后F5,我们运行一下:
1. 控制台输出成功

2. 浏览器显示成功

3. 浏览器输入 /api/class/findClassList,看看结果

以上三条,证明路由调用成功:调用controller中相关方法。后面再细致分享router,sequelize相关技术知识点。
附:代码结构如下

Vue2+Koa2+Typescript前后端框架教程--04班级管理示例(路由调用控制器)的更多相关文章
- Vue2+Koa2+Typescript前后端框架教程--03后端路由和三层模式配置
昨天将Koa2的基础框架和自动编译调试重启服务完成,今天开始配置路由和搭建基础的三层架构模式. 路由中间件:koa-router,即路由导航,就是我们平时使用最广泛的get/post方法执行的URL路 ...
- Vue2+Koa2+Typescript前后端框架教程--05Sequelize的使用(ORM)
本篇开始分享Node.js后端服务开发中对于数据结构ORM的实现,主要使用的技术栈是:Sequelize. 上一篇文章中讲到班级管理的数据结构:ID,班级名称,班级编码,班主任ID,使用的数据库是My ...
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...
- ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
- com.panie 项目开发随笔_前后端框架考虑(2016.12.8)
(一) 近日和一同学联系,说了我想要做一个网站的打算.她很感兴趣.于是我们协商了下,便觉得一起合作.她写前端,我写后台.因为我对于前端样式设计并不怎么熟悉. (二) 我们决定先做一个 个人博客. 网上 ...
- VSCode 完美整合前后端框架(angular2+.NET core)
首先打开命令行查看本地.NET版本. 通过命令行安装模板. dotnet new --install Microsoft.AspNetCore.SpaTemplates::* 创建demo目录,并用v ...
- ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用
在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...
- Spring Boot + Vue 前后端分离开发,权限管理的一点思路
在传统的前后端不分的开发中,权限管理主要通过过滤器或者拦截器来进行(权限管理框架本身也是通过过滤器来实现功能),如果用户不具备某一个角色或者某一个权限,则无法访问某一个页面. 但是在前后端分离中,页面 ...
随机推荐
- 2. 三数之和(数组、hashset)
思路及算法: 该题与第一题的"两数之和"相似,三数之和为0,不就是两数之和为第三个数的相反数吗?因为不能重复,所以,首先进行了一遍排序:其次,在枚举的时候判断了本次的第三个数的值是 ...
- Jenkins忘记管理员账户密码如何解决?
未修改初始密码时 进入Jenkins工作目录,读取初始密码文件initialAdminPassword: cat initialAdminPassword 然后在登陆页面使用该密码登陆admin用户, ...
- python之切片操作,实现一个trim()函数,去除字符串首尾的空格.
# -*- coding: utf-8 -*- def trim(s): if len(s)==0: return '' if s[:1]==' ': return trim(s[1:]) elif ...
- Spring Cloud 学习 (二) Ribbon
负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式:一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix:另一种是将负载均衡逻辑以代码的形式封装到服务消费 ...
- C#9.0新特性之四:顶级程序语句(Top-Level Programs)
1 背景与动机 通常,如果只想用C#在控制台上打印一行"Hello World!",这可不是Console.WriteLine("Hello World!"); ...
- 老猿学5G扫盲贴:3GPP规范中与计费相关的主要规范文档列表及下载链接
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<老猿学5G扫盲贴:3GPP规范中部分与计 ...
- 第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反
一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是组模式的扩 ...
- 中间件面试专题:RabbitMQ高频面试问题
- 百度前端技术学院-基础-day1
2020.9.14 今天我开始在百度前端技术学院学习基础课程. 先立一个Flag,希望我能在30天之内学完前四十天的课程,后续课程再一天一节. 第一天的内容主要是提供了很多基础学习的网页,比如W3sc ...
- 使用.Net Core做个爬虫
最近接手一个新项目,爬亚马逊分类.商品数据.记得大学的时候,自己瞎玩,写过一个爬有缘网数据的程序,那个时候没有考虑那么多,写的还是单线程,因为网站没有反爬,就不停的一直请求,记得放到实验室电脑上一天, ...