版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、源码解源码解koa理: 常见koao间件的实前准堂目手写手写ico间koaApplicationo间件机常见o间/ const http = class listen(.args) const server = res) = this.callback(req, this.callback(req, this.callback = module.exports = / 调用,const KKB = const app = new app.use(req, res) res.writeHead(200); app.listen(3000, () 端封装request1response和/ req
2、uest.js module.exports = get return this.r / response.js module.exports = get body() return set this._body = / context.js module.exports = get url() return get body() return set get body() return set this.response.body = / / 导入这Onconst context = require(./context); const request = const response = c
3、lass listen(.args) const server = http.createServer(req, res) = / PQlet ctx = this.createContext(req, / / / PQ文, 把res和req都d载rctx之P 并且在 qsrconst ctx = Object.creat (co pctx.request = t ( t ctx.response Obje )ctx.req = ctx. ctx.res = ctxreturn qtp/ app.js ctx.body = o间_步o间件:要支casync + await的o间件,要等_步结束
4、_步o间件:要支casync + await的o间件,要等_步结束function return function() return / 执行第function dispatch( ) let fn = middl wif (!fn) return return Promise. fn(function next() (/ promise完成,再执行Q一return dispatch(i + async function console.log(fn1); await next(); console.log(end fn1);async function await delay();await
5、 console.log(end function functionawait console.log(end function function delay() return new Promise(reslove, reject) setTimeout() , = const middlewares = const finalFn = comfn1, fn2, e用在const http = context = request = response = require(./res )KKB / _始化o间件数 listen(.args) const server = http const
6、ctx = / ot t C ( sync (req, res) t(req, const fn = po ( / 函数并传入PQawait fn(ctx); use(middleware) / 将o间件r函e(middlewares) return function(ctx) / 传入PQreturn dispatch(0); function dispatch(i) let fn = if (!fn) return return if (!fn) return return fn(ctx, function next() / 将PQ文传入o间件,mid(ctx,next) return d
7、ispatch(i + 1);createContext(req, res) let ctx = Object.create(context); ctx.request = Object.create(request); ctx.response = ctx.req = ctx.request.req = ctx.res = ctx.response.res = res; return ctx;module.exports = 用function sleep() return new Promise(reslove setTimeout() = , japp.use(async ody = 1
8、; setTimeout() ctx.body += , await next(); ctx.body += 3;app.use(async (ctx, next) ctx.body += 4; await delay(); await next(); ctx.body += 5;app.use(async (ctx, next) ctx.body += e的常见koao间件的实实现loggeromodule.exports = async function(ctx, nexte的常见koao间件的实实现loggeromodule.exports = async function(ctx, n
9、ext) 操作请求 const start = new Date().getTime() console.log(start: $ctx.url); await next();const end = new Date().getTime() console.log(请求$ctx.url, 耗时(end-请将module.exports = async function(ctx, const res, req = ctx; const blackList = ;const ip = / 出现在黑单o将if (blackList.includes(ip) ctx.body = not allowe
10、d; else await function return q) / 判断是否有反/ 判断 connection / 判断端的 socket 的 req.headersx-f w d d req.connection.rem t Add req.socket.remoteAd r/ app.listen(3000, , () = 端口静态文件服koa-/ const fs = require(fs); const path = require(path);module.exports = (dirPath = ./public) return async (ctx, next) = if (c
11、tx.url.module.exports = (dirPath = ./public) return async (ctx, next) = if (ctx.url.indexOf(/public) = 0) / public_头 取文url = path.resolve( dirname, aseName = filepath = url + ctx.url.replace(/public, / console.log(ctx.url,url, filepath, fitry s = if s.isDirectory() const dir = / const ret = ; dir.fo
12、rEach(filename = 简单认不带小数点的格式,就是文件夹if (filename.indexOf(.) - $filename else / $ret.push( /d else )t console.log( 文件 const content = ctx.body = catch (e) / 报错了 文件不存ctx.body = 404, not else / 否则不是静态资源,直接Q一noawait /const ic = /const ic = 路由 routes()的返回值是一no间件,由于需要用rtd所以需要d载trctx之P,修改module.exports get r
13、eturn get return class constructor() this.stack = ;ath, methods, middlew r let route = path, methods, dd w / 现在只支cgett,其get(path,middleware this.register( thg )t(path,midd this.regist (p dd routes() let stock = this.sta return async function(ctx, let currentPath = ctx.url; let route;for (let i = 0; i = 0) / 判断path和method route = item.middleware;if (typeof route = route(ctx, next); await module.exports = const Koa = requireawait module.exports = const Koa = require(./kkb) const Router = require(./router) const app = new Koa()con
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/Z 270-2026安全与韧性业务连续性管理体系业务连续性策略指南
- T/ZJSEE 0048.2-2025虚拟电厂 第2部分:信息交互功能规范
- T/JCJJ 048-2024钢渣资源回收利用一次处理工艺技术要求
- T/CNCA 065-2024二氧化碳深部咸水层地质封存泄漏监测指标体系
- T/CASMES 400-2024质子交换膜水电解制氢阳极催化剂 测试方法
- T/CSMT YB015-2025光电复合电离源飞行时间质谱仪性能测试方法
- GB/T 18591-2026焊接预热温度、道间温度及预热维持温度的测量
- 2027届重庆市沙坪坝区第八中学数学七上期末统考试题含解析
- 2025-2026学年辽宁省凤城市初中政治九年级期末上册自测核心强化题(附答案)
- PHP商城开发面试题及详细答案(实战版)
- GB/Z 270-2026安全与韧性业务连续性管理体系业务连续性策略指南
- 2026年溶聚丁苯橡胶行业洞察报告及未来五至十年发展趋势报告
- 2026年健康科普大赛基础测试题含答案
- 2026年四川省高考历史真题试卷
- 八年级物理上册期末《声现象》6大易错题专项训练
- 2026人教版六年级数学上册活动课《水是生命之源》教案
- 2026年四川省拟任县处级领导干部理论(任职资格考试)全真模拟试题及答案
- 钩吻碱中毒(断肠草中毒)的急诊处理
- 冷轧硅钢及金属制品深加工项目可行性研究报告模板拿地申报
- 2026年4月自考04184线性代数(经管类)试题及答案含评分参考
- 制度壁垒经济效应-洞察与解读
评论
0/150
提交评论