application.js是express框架的核心,也是里面包括了服务端的很多配置和逻辑代码。这里主要说一下和路由有关的一些代码。
/application.js") 对于上述代码,application.js并没有合并seajs模块,我们通过seajs.use创建了一个匿名use模块,.../application.js’];然后设置use模块的callback,并调用load函数加载依赖模块。...然后经过合并压缩之后,生产最终的application.js文件,在view/hello.html中引用(开篇提到)。 ...'] //对dist/application.js进行压缩,之后存入dist/application.js文件 } } }, ...'] //对dist/application.js进行压缩,之后存入dist/application.js文件 } } },
二、阅读源码核心文件四个application.js:简单封装http.createServer()并整合context.js application.js是koa的入口文件,它向外导出了创建class...挂载ctx在application.js中引入上面三个文件并放到实例上const context = require('....# application.js constructor () { // ... // 存放中间件数组 this.middlewares = [] } // 使用中间件 use...(fn) { this.middlewares.push(fn) }复制代码当处理用户请求时,期望执行所注册的一堆中间件 compose、dispatch # application.js...# application.js // 处理用户请求 handleRequest (req, res) { let ctx = this.createContext(req, res)
这里我们仅仅实现: 封装http.createServer到myhttp的类 将回调独立出来 listen方法可以直接用 step1/application.js let http=require("http...回到我们的application.js,让这个this指向我们的myhttp的实例。...step2/application.js class myhttp{ constructor(){ this.request=Object.create(request)...step3/application.js 接下来就是连接context和request和response了,新建一个createContext,将response和request颠来倒去地挂到context...step4/application.js class myhttp{ constructor(){ this.middleWares=[] ... }
koa源码结构 上图是koa2的源码目录结构的lib文件夹,lib文件夹下放着四个koa2的核心文件:application.js、context.js、request.js、response.js。...application.js application.js是koa的入口文件,它向外导出了创建class实例的构造函数,它继承了events,这样就会赋予框架事件监听和事件触发的能力。...这里对body进行操作并没有使用原生的this.res.end,因为在我们编写koa代码的时候,会对body进行多次的读取和修改,所以真正返回浏览器信息的操作是在application.js里进行封装和操作...而context.request,context.response则会在application.js中挂载。...接下来我们开始实现,修改application.js文件,添加如下代码: compose() { return async ctx => { function
上图是koa2的源码目录结构的lib文件夹,lib文件夹下放着四个koa2的核心文件:application.js、context.js、request.js、response.js。...application.js application.js是koa的入口文件,它向外导出了创建class实例的构造函数,它继承了events,这样就会赋予框架事件监听和事件触发的能力。...这里对body进行操作并没有使用原生的this.res.end,因为在我们编写koa代码的时候,会对body进行多次的读取和修改,所以真正返回浏览器信息的操作是在application.js里进行封装和操作...而context.request,context.response则会在application.js中挂载。...throw new Error('oooops'); 基于现在的框架,如果中间件代码中出现如上错误异常抛出,是捕获不到错误的,这时候我们看一下application.js中的callback函数的return
Koa类 从Koa项目的package.json里面的main这行代码可以看出,整个应用的入口是lib/application.js这个文件: "main": "lib/application.js",...lib/application.js这个文件就是我们经常用的Koa类,虽然我们经常叫他Koa类,但是在源码里面这个类叫做Application。...我们先来写一下这个类的壳吧: // application.js const Emitter = require("events"); // module.exports 直接导出Application...所以他有些方法如果在application.js里面找不到,那可能就是继承自EventEmitter,比如下图这行代码: ?...在Application的构造函数里面直接将this.context赋值为空对象: // application.js constructor() { // 省略其他代码 this.context
context.js:将上面两个文件的封装整合到 context 对象中 application.js:项目的启动及中间件的加载。 1....首先是类和构造函数的定义,这部分代码位于 application.js 中。 // application.js const response = require('....Koa 和 Express 在调用上都是通过调用 app.use() 的方式来加载一个中间件,但内部的实现却大不相同,我们先来看application.js 中相关方法的定义。..._name || fn.name || '-') this.middleware.push(fn) return this } Koa 在 application.js 中维持了一个 middleware...下面是 application.js 中 listen 方法的定义。
) at Server.listen (net.js:1127:5) at EventEmitter.listen (/root/webServer/node_modules/express/lib/application.js
express.js对应的源码看这里:github.com/expressjs/e… app.listen 上面说了,express.js只是一个空壳,真正的app在application.js里面,所以...// application.js var app = exports = module.exports = {}; app.listen = function listen() { var server..., res) { app.handle(req, res); // 这是真正的服务器处理入口 }; 复制代码 app.handle app.handle也是挂载在app下面的,所以他实际也在application.js..._router = new Router(); } } 复制代码 app.listen,app.handle和methods处理方法都在application.js里面,application.js...按照这个思路,代码就简单了: // application.js // app.use就是调用router.use app.use = function use(fn) { var path =
本文会循序渐进的解析内部原理,包括: 基础版本的 koa context 的实现 中间件原理及实现 文件结构 application.js: 入口文件,里面包括我们常用的 use 方法、listen 方法以及对...Coa() // 应用中间件 app.use((ctx) => { ctx.body = 'Hello' }) app.listen(3000, '127.0.0.1') application.js...return Promise.reject(error) } } } } 应用 实现完成中间件的逻辑后,将它应用到迷你版Koa中,原来的代码逻辑要做一些修改(部分代码忽略) application.js...res.end(body) } if (typeof body === 'object') { return res.end(JSON.stringify(body)) } } 完整实现 application.js
. ├── app │ ├── assets │ │ ├── images │ │ ├── javascripts │ │ │ └── application.js │
Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); 其实 use 方法的实现很简单,在 lib/application.js...文件中,我们找到了它的定义: // lib/application.js module.exports = class Application extends Emitter { constructor...其中 use 方法我们前面已经分析过了,所以接下来我们来分析 listen 方法,该方法的实现如下所示: // lib/application.js module.exports = class Application...另外,在调用 http.createServer 方法创建 HTTP 服务器时,我们传入的参数是 this.callback(),该方法的具体实现如下所示: // lib/application.js
可选) │ ├── request.js (可选) │ ├── response.js (可选) │ ├── context.js (可选) │ ├── application.js
koa框架的核心目录如下: ── lib ├── application.js ├── context.js ├── request.js └── response.js //...├── ctx ├── ctx.req || ctx.request └── ctx.res || ctx.response 复制代码 undefined koa源码基础骨架 application.js...application.js是koa的主入口,也是核心部分,主要干了以下几件事情: 完成了koa实例初始化的工作,启动服务器 实现了洋葱模型的中间件机制 封装了高内聚的context对象 实现了异步函数的统一错误处理机制
/javascript/Application.js'window.application = new Application({ $canvas: document.querySelector(...而处理逻辑的代码都来自于 Application.js,我们这里摘出一些比较重要的技术栈、项目用到的核心库,做一个简单的介绍。相信很多小伙伴早就猜到了,对!就是 Three.js。...实现的界面大致样子如下:图片三、讲解源码介绍完重要的技术点,下面继续回到逻辑处理的核心文件 Application.js 开始讲解源码。...一层一层查下去,我们发现他是在 Application.js 的时候加载进来的。进到 Resources.js 文件,我们可以发现有非常多的资源文件例如 .png、.glb 之类的。
Application 扩展文件为 application.js,存放于extend文件夹下。
我们来看看它是怎么实现的吧~ 入口和创建 context 在 koa 的源码中,只有四个文件,如下所示: ├── application.js ├── context.js ├── request.js...└── response.js 通过 package.json 中的 main 字段,我们知道入口为 lib/application.js 文件。
await next(); // 内层到外层的代码 ...... } koa 核心文件 有且仅有 4 个(精简、流畅、易用) application.js context.js request.js...response.js application.js 今天主要解剖一下这个货 ^_^ 继承自 Emitter 类,主要用于监听 error。
领取专属 10元无门槛券
手把手带您无忧上云