Day24
1-使用koa搭建服务器
let Koa = require('koa');
let KoaRouter = require('koa-router');
const app = new Koa();
const router = new KoaRouter();
router.get('/', (ctx, next) => {
ctx.body = '我是服务器';
});
app.use(router.routes())
app.use(router.allowedMethods())
app.listen('3000', () => {
console.log('服务器启动成功');
})
2-简单说明动态路由
根据输入路由的不同,加载访问不同的HTML页面
3-说明 express 和 koa 的中间件的使用
koa2的中间件是通过 async await 实现的,中间件执行顺序是“洋葱圈”模型。
与 koa2 中间件不同的是,express中间件一个接一个的顺序执行, 通常会将 response 响应写在最后一个中间件中
主要特点:
app.use 用来注册中间件
遇到 http 请求,根据 path 和 method 判断触发哪些中间件
实现 next 机制,即上一个中间件会通过 next 触发下一个中间件
4-简述 koa 的洋葱圈模型
整个核心功能在于 compose,这个用于压缩所有被 use 调用过的中间件之上。每一次 use 一个新的中间件的时候,将其 push 进对象里边的成员变量 middlewares 当中。
所以重点就是要在 compose 当中进行递归,以合成最终要调用的那个函数,在监听到 request 请求的时候,将上下文对象 context 传入其中,最终完成整个所有中间件按照 洋葱圈 的 模型去执行。
const Koa = require('koa2');
const app = new Koa();
app.use(async (ctx, next) => {
console.log('第一层洋葱 - 开始')
await next();
const rt = ctx.response.get('X-Response-Time');
console.log(`${ctx.method} ${ctx.url} - ${rt}`);
console.log('第一层洋葱 - 结束')
});
// x-response-time
app.use(async (ctx, next) => {
console.log('第二层洋葱 - 开始')
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${ms}ms`);
console.log('第二层洋葱 - 结束')
});
// response
app.use(async ctx => {
console.log('第三层洋葱 - 开始')
ctx.body = 'Hello World';
console.log('第三层洋葱 - 结束')
});
app.listen(8000);