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呢?
- createServer方法接受的是一个callback方法,会随着业务逻辑复杂化而变得臃肿
- 原生提供的一些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的语法使得异步流程可以更好的控制。