Koa源码分析(序)

Koa是基于Node.js平台的下一代web框架。(在这里记录一下之前分析过的Koa)
既然是基于Node.js,那我们首先来看一下原生Node实现Server服务器的用法。

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200);
  res.end('hello world');
});

server.listen(3000, () => {
  console.log('server start at 3000');
});

短短几行代码就实现了一个服务器Server,不是很厉害嘛,那为什么还要封装一个Koa呢?

  1. createServer方法接受的是一个callback方法,会随着业务逻辑复杂化而变得臃肿
  2. 原生提供的一些api有多种方法可以实现,多人合作时会造成代码不一致,比如
// 这两种写法都可以改变http状态码
res.statusCode = 200;
res.writeHead(200);

接下来,我们看一下Koa是怎么实现Server的,

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
  console.log('start-1');
  await next();
  console.log('end-1');
});


app.use(async (ctx, next) => {
  console.log('start-2');
  ctx.status = 200;
  ctx.body = 'Hello World';
  console.log('end-2');
});


app.listen(3000);

// 最后输出内容:
// start-1
// start-2
// end-2
// end-1

我们发现Node中回调函数的res,req被ctx执行上下文代理了,这样避免开发者直接接触底层;而且Koa使用中间件的概念来完成http请求的处理,同时,Koa采用了async和await的语法使得异步流程可以更好的控制。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。