首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Nodejs】994- 一文搞懂koa2核心原理

koa框架的核心目录如下: ── lib ├── application.js ├── context.js ├── request.js └── response.js //...运行机制如下图所示: undefined koa-convert解析 在koa2中引入了koa-convert库,在使用use函数时,会使用到convert方法(只展示核心的代码): const convert...框架捕获是在context.js中作了相应的处理this.app.emit('error', err, this),这里的this.app是对application的引用,当context.js调用onerror...我们在源码中可以看到,response.js和request.js使用的是get set代理,而context.js使用的是delegate代理,为什么呢?...在context.js中,只需要代理属性即可,使用delegate方法完全可以实现此效果,而在response.js和request.js中是需要处理其他逻辑的,如以下对query作的格式化操作: get

58810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【kao 源码】聊聊 Koa 中的 context

    这些操作在 HTTP 服务器开发中频繁使用,它们被添加到此级别而不是更高级别的框架,这将强制中间件重新实现此通用功能。...我们来看看它是怎么实现的吧~ 入口和创建 context 在 koa 的源码中,只有四个文件,如下所示: ├── application.js ├── context.js ├── request.js...return handleRequest; } createContext 可以看到,每次请求,我们都通过 Object.create 创建一个上下文信息,也就是 context,它的原型会指向 context.js...context.js 其实这个文件就是导出了一个对象,如下: const proto = module.exports = { inspect() { }, toJSON() {...access('etag') .getter('headerSent') .getter('writable'); delegates-委托模式的应用 delegates 可以帮我们方便快捷地使用设计模式当中的委托模式

    95510

    使用 Egg + Vue 开发在线文档管理平台(8000字,手把手教程)

    // app/extend/context.js module.exports = { /** * 返回客户端的内容 * @param status // 接口是否成功...router.post('/user/infor',jwt, controller.user.infor); }; 接下来我去编写我的控制器,在根目录下的 app/controller/home.ts 编写内容:这里使用了两个我们在...再扩展个 getUser 方法获取 token 加密信息 // app/extend/context.js // 获取用户信息 async getUserData() { var...至此我们就实现了 jwt 生成 token , 然后通过前端传过来的 token 获取当前登录用户的信息, jwt 登录授权这块应该是讲完了,其他的业务接口应该实现起来难度不大 md文档编辑 文档编辑器使用...app.router.redirect('/', '/index.html', 302); 部署 服务端部署运行 start 命令 npm run start 性能监控 node 服务性能监控这块可以使用阿里免费开源的

    3.8K40

    Egg + Vue + MongoDB 实践开发在线文档管理平台

    // app/extend/context.js module.exports = { /** * 返回客户端的内容 * @param status // 接口是否成功...router.post('/user/infor',jwt, controller.user.infor); }; 接下来我去编写我的控制器,在根目录下的 app/controller/home.ts 编写内容:这里使用了两个我们在...再扩展个 getUser 方法获取 token 加密信息 // app/extend/context.js // 获取用户信息 async getUserData() { var...至此我们就实现了 jwt 生成 token , 然后通过前端传过来的 token 获取当前登录用户的信息, jwt 登录授权这块应该是讲完了,其他的业务接口应该实现起来难度不大 md文档编辑 文档编辑器使用...app.router.redirect('/', '/index.html', 302); 部署 服务端部署运行 start 命令 npm run start 性能监控 node 服务性能监控这块可以使用阿里免费开源的

    1.6K20

    前端面试-实现一个简版koa

    目录 koa的使用 简单阅读下koa源码 ctx挂载了什么东西 next构建的洋葱模型 中间件含异步代码如何保证正确执行 解决多次调用next导致混乱问题 基于事件驱动去处理异常 koa的使用 koa的使用非常简单...核心文件四个 application.js:简单封装http.createServer()并整合context.js context.js:代理并整合request.js和response.js request.js...创建context.js/request.js/response.js三个文件 request.js内容 const url = require('url') let request = {} module.exports...= request response.js内容 let response = {} module.exports = response context.js内容 let context = {} module.exports...ctx } handleRequest (req, res) { let ctx = this.createContext(req, res) return ctx } 在context.js

    47520

    Node学习笔记 - Koa源码阅读

    现在经常用到node的项目是使用Egg来实现的,不得不说Egg是一个非常优秀的框架,而且Egg也是基于Koa来封装实现的,那么既然这样,我就打算先学习Koa的源码,以及好好看看Koa的使用,为以后自己造轮子做一个准备...当然我没有用过1.x版本和使用过Generator,所以不做过多了解,有await/async就可以了。...通过Object.create的方式,创建一个基于context.js,request.js和response.js的新的context,request和response。...context.js inspect toJSON - 获取当前ctx的内容 assert - http-assert,对http-errors的封装,一些基本的断言并设置http返回体 onerror...ctx.cookies == new Cookies() 在context中有比较重要的一点,就是context使用了delegates这个库(tj大神的库)。

    63050

    KOA2框架原理解析和实现

    本文所用的框架是koa2,它跟koa1不同,koa1使用的是generator+co.js的执行方式,而koa2中使用了async/await,因此本文的代码和demo需要运行在node 8版本及其以上...koa源码结构 上图是koa2的源码目录结构的lib文件夹,lib文件夹下放着四个koa2的核心文件:application.js、context.js、request.js、response.js。...、response对象挂载到ctx的上面,让koa实例和代码能方便的使用到request、response对象中的方法。...现在我们创建context.js文件,输入如下代码: let proto = {};function delegateSet(property, name) {    proto....koa的剥洋葱模型在koa1中使用的是generator + co.js去实现的,koa2则使用了async/await + Promise去实现的,接下来我们基于async/await + Promise

    71910

    深入koa源码 - 架构设计

    对外暴露都是一个对象,对象上的属性都使用了getter或setter来实现读写控制。 上下文 对应的文件是:context.js。存了运行环境的上下文信息,例如cookies。...注意:req 和 res 并不是在context.js中被绑定到上下文的,而是在application被绑定到上下文变量ctx中的。原因是因为每个请求的 req/res 都不是相同的。...这个文件的逻辑是最重要的,它的作用主要是: 给用户暴露服务启动接口 针对每个请求,生成新的上下文 处理中间件,将其串联 对外暴露接口 使用 koa 时候,我们常通过listen或者callback来启动服务器...这里我觉得更像语法糖,是为了让 koa 使用使用更方便。...可以看到,koa 为了让开发者使用方便,在上下文上做了很多工作。 中间件机制 中间件的设计是 koa 最重要的部分,实现上用到了koa-compose库来串联中间件,形成“洋葱模型”。

    39020

    【JS】304- KOA2框架原理解析和实现

    本文所用的框架是koa2,它跟koa1不同,koa1使用的是generator+co.js的执行方式,而koa2中使用了async/await,因此本文的代码和demo需要运行在node 8版本及其以上...上图是koa2的源码目录结构的lib文件夹,lib文件夹下放着四个koa2的核心文件:application.js、context.js、request.js、response.js。...、response对象挂载到ctx的上面,让koa实例和代码能方便的使用到request、response对象中的方法。...现在我们创建context.js文件,输入如下代码: let proto = {}; function delegateSet(property, name) { proto....koa的剥洋葱模型在koa1中使用的是generator + co.js去实现的,koa2则使用了async/await + Promise去实现的,接下来我们基于async/await + Promise

    92410

    关于react中的context

    一、context有什么用 当我们使用props进行组件中的数据传递时,假如祖先级组件的数据要传递至孙子级,这种情况的话,我们需要将祖先级别组件的属性通过props传递至父组件属性,再通过父组件的属性中的...而我们使用context,则不需要使用props进行一层一层传递。...学习网址 https://react.docschina.org/docs/context.html#%E4%BD%95%E6%97%B6%E4%BD%BF%E7%94%A8-context 三、如何使用...context 我们最好创建一个js文件例如context.js文件,在文件中如下引入 import {createContext} from 'react' const {Provider,Consumer...} = creaateContext() export {Provider,Consumer} 然后我们在父组件最外层使用Provider组件进行包裹,将要传递的数据通过Provider组件的value

    1.1K20

    深入koa2源码

    context 中间件第一个实参ctx的原型, 具体在讲context.js时会说到。 request ctx.request的原型,定义在request.js中。...由于koa最开始支持使用generator函数作为中间件使用,但将在3.x的版本中放弃这项支持,因此koa2中对于使用generator函数作为中间件的行为给与未来将被废弃的警告,但会将generator...接下来我们的重点是context.jscontext.js context.js定义了ctx的原型对象的原型对象, 因此这个对象中所有属性都可以通过ctx访问到。...context.js中除了定义[util.inspect.custom]这个不是很重要的属性外,只直接定义了一个属性cookies,也定义了几个方法,这里分别进行介绍: cookies get cookies...另外从代码中可以看出,中间件的执行是异步的,并且中间件执行完毕后返回的是一个Promise,每个dispatch的返回值也是一个Promise,因此我们的中间件中可以方便地使用async函数进行定义,内部使用

    52630

    delegates - 委托模式的简单实现

    本文作者:IMWeb elvin 原文出处:IMWeb社区 未经同意,禁止转载 最近发现一个有意思的模块 - delegates,它由大名鼎鼎的 TJ 所写,可以帮我们方便快捷地使用设计模式当中的委托模式...需要注意的是尽管 __defineGetter__ 曾被广泛使用,但是已不被推荐,建议通过 Object.defineProperty 实现同样功能,或者通过 get 操作符实现类似功能: const..._name); // undefined 'elvin' 同样地,虽然 __defineSetter__ 曾被广泛使用,但是已不被推荐,建议通过 Object.defineProperty 实现同样功能...这些对请求参数的获取都得益于 koa 中 context.request 的许多属性都被委托在了 context 上: // Koa 源码 lib/context.js delegate(proto,...这些对响应参数的设置都得益于 koa 中 context.response 的许多属性和方法都被委托在了 context 上: // Koa 源码 lib/context.js delegate(proto

    68310
    领券