koa --- 自制简易的koa-router
打算自己写一个简单的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相关推荐
- koa框架(一) 认识koa
koa koa是express原班人马打造的轻量.健壮.富有表现力的nodejs框架.目前koa有koa1和koa2两个版本:koa2依赖Node.js 7.6.0或者更高版本:koa不在内核方法中 ...
- unity 编辑器存档_Unity教程 | 自制简易的游戏存档系统
原标题:Unity教程 | 自制简易的游戏存档系统 本文将为大家分享如何在Unity中实现简单的游戏存档系统,其中不会包含太多实际的代码,仅介绍在制作过程中需要考虑与解决的问题.该系统由一个学生团队为 ...
- JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)
JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...
- 使用STM8单片机+NTC热敏电阻自制简易温度巡检仪
最近在测试设备的时候需要监测设备的温度,平常测试时都是通过红外热成像仪测试,然后手动记录数据.这样测试的话工作量比较大,需要几分钟就记录一次数据.于是想着能不能用单片机做一个测试温度的装置,用电脑 ...
- stm32zet6自制简易示波器
自制简易示波器 波形发生 DAC+DMA+TMR 波形发生器采用的是DAC+DMA+TMR的方案,主要思路:PA4 DAC的通道1,通过DMA把内存dataDAC[N]中的数据传送到DAC,并转换成模 ...
- C语言自制简易钢琴块
C语言自制简易钢琴块 在网上无聊时找的如何用C语言编译器做钢琴块这个小游戏,没事可以自己看看,从中学到一些新东西. // Piano piece.cpp: 定义控制台应用程序的入口点. //autho ...
- 使用AS自制简易微信界面
文章目录 一.设计目标 二.功能说明 三.代码解析 1. layout文件夹 头部标签栏 底部(四个按钮) 中间信息栏 主界面布局 2. drawable文件夹 3.java文件夹 Fragment ...
- koa灵魂拷问之koa源码--呕心沥血之作
前言 随着前端的生态逐渐变好,前端一定程度上也进入了内卷时代.从目前来看,node.js逐渐成为前端必会的技术栈之一,他可以让我们快速的搭建一个后端,从而让我们不再依赖后端. 而在node.js里面的 ...
- 自制简易前端MVC框架
周末花了大概7小时写了一个简易的响应式blog,原意是练习css的,写着写着却去实现了一套前端路由并渲染的东西,这里写一点心得体会 基本思路与涉及技术 使用url hash进行路由跳转 js监听has ...
最新文章
- Cocos2dx小技巧 单例
- php选框判断,网络编程如何判断php复选框是否被选中
- 如何产生高斯带限白噪声数据_车间噪声对我们的身体产生巨大影响,我们该如何解决?...
- HT For Web 拓扑图背景设置
- Linux TCP/IP中L4L3的实现框架:udp send部分
- Hadoop集群HDFS各节点磁盘使用率不平衡,使用balancer做数据平衡
- C++/C--动态二维数组的内存分配与释放【转载】
- python编程(ply库)
- 生物信息Python-从入门到精通?
- Dropout 理论基础与实战细节
- 12月 Web 服务器调查:nginx 增长最快,微软市场份额最高
- NYOJ760-See LCS again,有技巧的暴力!
- [学习笔记] JQuery datepicker用法 [转]
- 计算机科学与技术专业实训手册,计算机专业实习工作手册.doc
- pgAdmin连接postgresql
- loadrunner+fiddler代理录制
- luogu 2735 电网 皮克公式
- 1-2 实验2 点对点通信
- C/C++基础 hypot函数
- 线程池 ExecutorService 的使用例子
热门文章
- android 清空所有控件,如何清空android ListView控件的内容
- linux 命令 考试,linux常用命令总结-第一次考试
- 无法复制winevt中的文件_u盘文件无法复制怎么解决 u盘文件无法复制解决方法【详细步骤】...
- golang如何打印float64的整数部分_2020-08-10:如何不用加减乘除求浮点数的2倍值?...
- 织梦自定义html文本,织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章...
- Node.js异步库async
- program collections
- C# ASP 面试题 2017
- ###《Effective STL》--Chapter3
- 表单的get和post使用情景