koa2源码简单分析(一)

在koa的使用中,必修的一个应用是:

const Koa = require('koa');     //引入koa框架
const app = new Koa();   // new 一个app 对象

app.use(async ctx => {
  ctx.body = 'Hello World';  //返回页面文本
});

app.listen(3000);   //启动端口

根据原理,我们也可以新建一个类似的源码

class Kao {
  //跟koa中的listen语法一样,
  listen(...args){
        const server = http.createServer((req, res) => {
            //创建上下文
            const ctx = this.createContent(req, res)
            //执行use里面的函数
            this.callback(ctx)  
            res.end(ctx.body)  
        });
        return server.listen(...args)
    }
  //跟koa中的use一样
  use(callback) {
        this.callback = callback;  //将回调函数绑定在callback上面
    }
//这一步的目的是将req, res给挂载到一个对象上面,这样在使用的时候,我们只需要使用ctx这一个对象就可以了!
  createContent(req, res) {
        const ctx = Object.create({})   //新建一个ctx对象
        ctx.req = req;  //给ctx对象挂载一个req属性
        ctx.res  = res;  //给ctx对象挂载一个res属性
        return ctx   //将ctx对象返回出去
    }
}

// 下面代码为运行代码
let app = new Koa();

app.use(ctx => {
    ctx.body = "hello body"
})

app.listen(3000, "localhost", () => {
    console.log("启动成功")
});

用node app.js命令运行这个文件,就可以看到我们页面出现"hello body"

总结:
1、use函数执行是在listen启动后,node返回了req, res信息后,我们将这两个信息封装到一个ctx对象中。
2、在执行use回调函数中,回调的参数就只有一个ctx。这时候,我们就执行这个回调函数。
3、res.end(ctx.body) 为输出到页面的node用法。

你可能感兴趣的:(koa2源码简单分析(一))