打算自己写一个简单的Router类,来实现koa-router这个中间件的(部分)神奇功能

确定需求

1.首先导入需要在app.js里面导入自己写的Router类
2.然后是使用的方式和挂载router的方式

// 导入Router类
const Router = require('./components/router.js');// 使用方式,(暂时只对get请求做处理)
const router = new Router();
router.get('/404',(ctx, next) => {ctx.body = 'Page not found';ctx.status = 404;
})
app.use(router.routes());

设计

  • 以上只是部分代码,在本篇的结尾会贴出整体代码.
  • 上面设计到Router实例(router)的2个方法:get和routes.
  • get():接受了2个参数,一个是需要处理的url,一个是对应路由的路由事件处理函数.该方法,将处理的路由和路由处理事件存入一个数组中,因此需要一个_routes的私有数组
  • routes():app.use里面接受的是一个async函数,因此在routes方法中,需要返回一个async函数,当收到来自客户端的url请求后(url的信息被存储在ctx中),需要根据请求方法和url地址,找到_routes中对应的处理函数,然后等待执行. await…

实现

// router.js
class Router{constructor() {this._routes = [];}get(url, hanlder) {this._routes.push({url: url,method:'GET',handler});}routes() {return async (ctx, next) {const { method, url} =ctxconst matchedRouter = this._routes.find(r => r.method === method && r.url === url);if(matchedRouter && matchedRouter.handler(context, next){await matchedRouter.handler(ctx, next);} else {awai next();}}}
}
module.exports = Router;

补充

完整的app.js

const koa = require('koa');
const app = new koa()
const Router = require('./components/router.js');
const router = new Router();router.get('/404', (ctx, next) => {ctx.body = 'Page not found';ctx.status = 404;
});
app.use(router.routes()).listen(3000);

koa --- 自制简易的koa-router相关推荐

  1. koa框架(一) 认识koa

    koa ​koa是express原班人马打造的轻量.健壮.富有表现力的nodejs框架.目前koa有koa1和koa2两个版本:koa2依赖Node.js 7.6.0或者更高版本:koa不在内核方法中 ...

  2. unity 编辑器存档_Unity教程 | 自制简易的游戏存档系统

    原标题:Unity教程 | 自制简易的游戏存档系统 本文将为大家分享如何在Unity中实现简单的游戏存档系统,其中不会包含太多实际的代码,仅介绍在制作过程中需要考虑与解决的问题.该系统由一个学生团队为 ...

  3. JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)

    JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...

  4. 使用STM8单片机+NTC热敏电阻自制简易温度巡检仪

      最近在测试设备的时候需要监测设备的温度,平常测试时都是通过红外热成像仪测试,然后手动记录数据.这样测试的话工作量比较大,需要几分钟就记录一次数据.于是想着能不能用单片机做一个测试温度的装置,用电脑 ...

  5. stm32zet6自制简易示波器

    自制简易示波器 波形发生 DAC+DMA+TMR 波形发生器采用的是DAC+DMA+TMR的方案,主要思路:PA4 DAC的通道1,通过DMA把内存dataDAC[N]中的数据传送到DAC,并转换成模 ...

  6. C语言自制简易钢琴块

    C语言自制简易钢琴块 在网上无聊时找的如何用C语言编译器做钢琴块这个小游戏,没事可以自己看看,从中学到一些新东西. // Piano piece.cpp: 定义控制台应用程序的入口点. //autho ...

  7. 使用AS自制简易微信界面

    文章目录 一.设计目标 二.功能说明 三.代码解析 1. layout文件夹 头部标签栏 底部(四个按钮) 中间信息栏 主界面布局 2. drawable文件夹 3.java文件夹 Fragment ...

  8. koa灵魂拷问之koa源码--呕心沥血之作

    前言 随着前端的生态逐渐变好,前端一定程度上也进入了内卷时代.从目前来看,node.js逐渐成为前端必会的技术栈之一,他可以让我们快速的搭建一个后端,从而让我们不再依赖后端. 而在node.js里面的 ...

  9. 自制简易前端MVC框架

    周末花了大概7小时写了一个简易的响应式blog,原意是练习css的,写着写着却去实现了一套前端路由并渲染的东西,这里写一点心得体会 基本思路与涉及技术 使用url hash进行路由跳转 js监听has ...

最新文章

  1. Cocos2dx小技巧 单例
  2. php选框判断,网络编程如何判断php复选框是否被选中
  3. 如何产生高斯带限白噪声数据_车间噪声对我们的身体产生巨大影响,我们该如何解决?...
  4. HT For Web 拓扑图背景设置
  5. Linux TCP/IP中L4L3的实现框架:udp send部分
  6. Hadoop集群HDFS各节点磁盘使用率不平衡,使用balancer做数据平衡
  7. C++/C--动态二维数组的内存分配与释放【转载】
  8. python编程(ply库)
  9. 生物信息Python-从入门到精通?
  10. Dropout 理论基础与实战细节
  11. 12月 Web 服务器调查:nginx 增长最快,微软市场份额最高
  12. NYOJ760-See LCS again,有技巧的暴力!
  13. [学习笔记] JQuery datepicker用法 [转]
  14. 计算机科学与技术专业实训手册,计算机专业实习工作手册.doc
  15. pgAdmin连接postgresql
  16. loadrunner+fiddler代理录制
  17. luogu 2735 电网 皮克公式
  18. 1-2 实验2 点对点通信
  19. C/C++基础 hypot函数
  20. 线程池 ExecutorService 的使用例子

热门文章

  1. android 清空所有控件,如何清空android ListView控件的内容
  2. linux 命令 考试,linux常用命令总结-第一次考试
  3. 无法复制winevt中的文件_u盘文件无法复制怎么解决 u盘文件无法复制解决方法【详细步骤】...
  4. golang如何打印float64的整数部分_2020-08-10:如何不用加减乘除求浮点数的2倍值?...
  5. 织梦自定义html文本,织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章...
  6. Node.js异步库async
  7. program collections
  8. C# ASP 面试题 2017
  9. ###《Effective STL》--Chapter3
  10. 表单的get和post使用情景