一、 介绍
本文开始分析koa源码的开篇,所以先来了解一下小案例
二、小案例
1、输出helloworld
const Koa = require('koa')
const static = require('koa-static')
const app = new Koa()
app.use(async(ctx) => {
ctx.body = 'hello world'
})
app.listen(3000)
2、输出静态资源
const Koa = require('koa')
const static = require('koa-static')
const app = new Koa()
app.use(static(__dirname + '/public'))
app.listen(3000)
三、项目结构
1、 使用mddir工具生成项目目录
- npm install mddir -D
- npx mddir
2、项目目录
|-- koa
|-- AUTHORS # 奉献者信息
|-- CODE_OF_CONDUCT.md # 行为准则规范
|-- History.md # 历史版本
|-- LICENSE # 许可
|-- package.json # 项目描述信息
|-- Readme.md # README
|-- benchmarks # 基准测试
|-- docs # 文档说明
|-- examples # 示例代码目录
|-- lib # 库目录,核心代码
| |-- application.js # 应用库
| |-- context.js # 上下文库
| |-- request.js # request库
| |-- response.js # response库
|-- test # 测试目录
四、洋葱模型
koa2的demo:
const Koa = require('koa');
const app = new Koa();
// x-response-time
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${ms}ms`);
//logger
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
// response
app.use(async ctx => {
ctx.body = 'Hello Wolrd';
});
app.listen(3000);
/**
* 执行过程:
* 1. 创建一个跟踪响应时间的 时间戳
* 2. 等待下一个中间件执行完毕
* 3. 创建另一个logger的持续时间
* 4. 等待下一个中间件执行完毕
* 5. 将响应体设置为 'hello world'
* 6. 计算出logger的持续时间
* 7. 输出logger
* 8. 计算响应的持续是按
* 9. 将 x-response-time 响应头设置好
* 10. 交给koa处理
*/