浅尝Koa —— 基于Node.JS的下一代Web框架

What is Koa?

Koa 是 Node.JS 平台下的一款 Web 服务器框架,它由原Express团队开发,区别于Express大量使用回调函数的形式,Koa采用最新的async/await模式,使用异步函数的方式来处理 HTTP 请求

Why Koa?

相比于Express是一个高度集成化的 Web 框架,Koa显得更加的小而美, 它本身并不集成任何的中间件(包括路由),但得益于它优秀的理念,以及便捷的模式,我们可以通过大量的第三方库对其功能进行扩充。

从业务上来说,使用Koa可以很容易地控制项目的规模。

从开发上来说,Express使用 callback 的方式处理异步,而在Koa中,Koa1采用 generator,Koa2使用async/await的方式来处理异步流程控制。

例如使用 callback 的方式请求资源:

fetchData(resourceID, method, function (data) {
  process(data, function (result) {
    handle(result);
  });
});

换成 generator 的模式:

function* fetchData() {
  var result = yield fetch(resourceID);
  return result;
}

var data = fetchData();
data.next();
var result = process(data);
result.next();
handle(result);

再使用 async/await 模式:

async function fetchData() {
  return fetch(resourceID);
}

var data = await fetchData();
var result = await process(data);
handle(result);

可以看出,使用 async/await 的方式可以使得异步编程更加简洁易懂,而且最新的 JS 为我们提供了这样方便的模式,我们没有理由不使用更好且更新的东西。

使用 Koa2

使用 Koa 实现 Hello World

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

async function hello(ctx, next) {
  ctx.body = "Hello World!";
  next();
}

async function welcome(ctx, next) {
  await next();
  ctx.body += "Welcome To Koa2";
}
app.use(hello);
app.use(welcome);

app.listen(3000);

Context

Express中不同,Koarequestresponse集成到了Context中,也就是我们实现中间件函数中的ctx参数,可以通过ctx.requestctx.response来对请求和响应进行操作。

展望

目前Koa社区尚且比较小,但其量级够轻,并且更加先进,这应该是一个值得开拓的新技术,对于开发者自身来说,使用 JS 语言的新特性用也可以更加顺手

本文总阅读量