Koa

作者: kzc爱吃梨 | 来源:发表于2022-02-27 23:44 被阅读0次

Koa对比Express

编程模型不同

  • Express的中间件是线型的**
  • Koa的中间件是U型的(后面会讲)


    Koa的中间件模型

对语言特性的使用不同

  • Express使用回调函数 next()
  • Koa v1.x使用 generator语法
  • Koa v2.x使用 async/await语法

示例代码
记录返回hello world的总耗时

import Koa from 'koa'

const app = new Koa()

app.use(async (ctx, next) => {
    //  空
    await next();
    const time = ctx.response.get('X-Response-Time');  //  读取response header
    console.log(`${ctx.url} - ${time}`);
});

app.use(async (ctx, next) => {
    const start = Date.now();  //  记录开始时间
    await next();
    const time = Date.now() - start;  //  记录结束时间 - start = 总耗时
    ctx.set('X-Response-Time', `${time}ms`);  //  写到response header里
});

app.use(async ctx => {
    ctx.body = 'Hello World';
    // 最后一个中间件可以不写 await next()
});

app.listen(3000, ()=> {
    console.log('listen 3000')
})
运行顺序
  • 1后面的 await next() 会等待4执行完毕
  • 2后面的 await next()会等待3执行完毕

await next()是什么意思

释义

app.use(async(ctx,next)=> {
    const start = Date.now();
    await next();  // 等待 下一个中间件()
    const time = Date.now() - start;
    ctx.set('X-Response-Time',`${time}ms`)
})
  • next()表示进入下一个函数
  • 下一个函数会返回一个Promise对象,称为p
  • 下一个函数所有代码执行完毕后,将p置为成功
  • await会等待p成功后,再回头执行剩余的代码

await next()改写

改写成Promise 写法

app.use(async (ctx, next) => {
    const start = Date.now();
    return next().then(() => {
        const time = Date.now() - start;
        ctx.set('X-Response-Time', `${time}ms`)
    })
})
  • 定要写 return,因为中间件必返回 Promise对象
  • 错误处理在这里写有点反模式,用app.on('error')更方便一点
app.xxx
文档在此 ctx.xxx
文档在此 ctx.request.xxx
文档在此 ctx.response.xxx
文档在此

相关文章

  • koa2 用到的中间件

    koa-router //koa路由 koa-bodyparser //post 获取值 koa-stat...

  • koa-router处理URL

    koa-router处理URL koa-router使用的结构const Koa = require('koa')...

  • koa 自学入门

    const Koa = require('koa');const route = require('koa-rou...

  • 初见 Koa 2

    koa 和 koa 2 最大的不同是koa 2 支持 async/await。koa 通过结合 generato...

  • trello01:后端搭建

    开发依赖: koa : 后端的主框架。 koa-router:基于Koa的路由。 koa-static-cache...

  • Koa2教程(常用中间件篇)

    目录一、koa-bodyparser二、koa-router三、koa-views + ejs四、koa-stat...

  • koa2设置跨域

    npm install --save koa2-corsvar Koa = require('koa');var ...

  • koa

    koa 学习 中间件 koa-router koa-router 获取get/post请求参数 koa-bodyp...

  • koa2 入门教程

    koa koa 中文koa-generator 简介 koa 是一个新的 web 框架, 由 express 原班...

  • UMI 服务端渲染

    Umi 开启服务端渲染: 安装 koa、koa-compress、 koa-mount、koa-static、ko...

网友评论

      本文标题:Koa

      本文链接:https://www.haomeiwen.com/subject/yepwlrtx.html