参考23课koa2源码解读_第1页
参考23课koa2源码解读_第2页
参考23课koa2源码解读_第3页
已阅读5页,还剩5页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论