浅析Koa2中控制器

news/2024/10/18 0:30:42/

控制器

什么是控制器

拿到路由分配的任务,并执行

路由的功能是根据不同的 url, 来分配不同的任务。

控制器是拿到路由分配的任务并执行,是注册在路由中的中间件。

所以在 koa 中, 控制器也是一个中间件。

为什么要使用控制器

  • 获取HTTP请求参数
  • 处理业务逻辑

获取HTTP请求参数

  • Query String,如 ?kw=html
  • Router Params,如 /users/:id
  • Body,如 {name: “李雷”}
  • Header,如 Accept、Cookie

发送HTTP响应

  • 发送Status,如 200/400 等
  • 发送Body,这里是返回内容, 如{name:“test”},restfulapi 里返回的常常是 json, 但是传统 web 开发也会返回 html
  • 发送Header,如Allow(代表允许的HTTP方法)、Content-Type(告诉客户端返回的格式应用哪种方式解析, restful api 里面常常是 json)

编写控制器最佳实践

  • 每个资源的控制器放在不同的文件里
  • 尽量使用类+类方法的形式编写控制器
  • 严谨的错误处理

更多精彩内容,请微信搜索“前端爱好者戳我 查看

编写控制器

创建app->controllers文件夹存放控制器。

控制器本质是中间件,中间件本质是函数,为了更合理组织这些控制器,最好采用类+类方法的形式进行编写。

用户控制器users.js为例


// 用户控制器users.js
const db = [{ name: "test" }]class UsersCtl {//获取用户列表find(ctx) {ctx.body = db;}//获取特定用户findById(ctx) {ctx.body = db[ctx.params.id1];}//创建用户create(ctx) {db.push(ctx.request.body);ctx.body = ctx.request.body;}//更新用户update(ctx) {db[ctx.params.id1] = ctx.request.body;ctx.body = ctx.request.body;}//删除用户delete(ctx) {db.splice(ctx.params.id * 1, 1);ctx.status = 204}
}// 导出实例化的控制器
module.exports = new UsersCtl();

http://www.ppmy.cn/news/79807.html

相关文章

Unix/C/C++进阶--线程 pthread_creat() return 1失败

Unix/C/C进阶--pthread_creat return 1失败 1 介绍1.1 man pthread_create1.2 一般失败原因1.3 最大进程/线程数(理论)1.3 最大进程/线程数(实际)1.4 查看Linux实际运行的总线程数1.5 查看运行的进程1.6 查看进程信息1.7 top -H 一…

qt quick(qml)通过arcgis导入自定义格式地图(Windows 版本)

参考ArcGIS Maps SDK for Qt 参考Display a map 安装 预先安装的软件 安装ArcGIS SDK 点击ArcGIS Maps SDK for Qt 注册账号 要注册成developer版本用户的,不然之后可能没办法生成API 下载 下载之后安装,一路next就可以了 在QT中创建ArcGIS项目…

一种适用于大量租户大量角色权限系统设计

前言 权限管理是每个系统不可缺少的一部分,大部分开发者应该都设计过权限管理系统,很多开发者学习的第一个项目可能就是权限管理系统。但是常见的权限设计在租户量非常大、角色数量非常多时会存在角色权限表数据量指数增长的情况,本文介绍一…

自动化测试与手工测试?你真的了解吗?如何共存...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

每日一练 | 网络工程师软考真题 Day10

1、下面是显示交换机端口状态的例子: 2950# show interface fastEthernet0/1 switchport Name: fa0/1 Switchport: Enabled Administrative mode: trunk Operational Mode: trunk Administrative Trunking Encapsulation: dot1q Operational Trunking Encaps…

【错误记录】androidx.swiperefreshlayout.widget.SwipeRefreshLayout导包失败

一、错误记录 项目引用包appcompat从1.1.1升级到1.4.1 升级前 implementation androidx.appcompat:appcompat:1.1.0xml布局中使用androidx.swiperefreshlayout.widget.SwipeRefreshLayout正常 升级后 implementation androidx.appcompat:appcompat:1.4.1xml布局中使用android…

常见的一些内网穿透工具

内网穿透的英文叫做 NAT traversal,又被称为端口映射或内网映射,内网穿透是网络连接术语,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。 内网穿…

一文详解Java自定义注解

目录 简介 JDK注解 Target Retention Documented Inherited 第三方注解 自定义注解 举例 默认字符串注解 实现指定包名称扫描注解 简介 注解(Annotation)是Java SE 5.0 版本开始引入的概念,它是对 Java 源代码的说明,…