前言
本文是koa快速入门的第一篇:基础使用,后续还会再写两篇文章,介绍「koa项目最佳实践」和「深究koa原理」。
简介
koa是Express团队打造的新一代web框架,特点是更小,更舒服的开发体验。
更舒服的开发体验
koa对Express的改进之一,是对异步实现方式的改进。
Express是基于ES5的,其异步写法更常见的是基于回调,当然只要node版本支持,也可以用async/await,但是其自身对async/await没有太多支持,如果用了async/await,在错误处理和中间件执行顺序上要开发者自己解决一些问题。
下面代码是Express使用Promise回调时候的一个异常处理示例。
代码语言:javascript复制const express = require("express");
const app = express();
//create a server object:
app.get("/", (req, res, next) => {
// do some sync stuff
queryDb()
.then((data) => {
res.write("Hello" data); //write a response to the client
res.end();
}) // handle data
.catch(next); //catch(next)处理异步代码块中的任何异常
});
app.use((err, req, res, next) => {
res.write("reject" err); //write a response to the client
res.end();
});
// 所有异步代码必须返回 Promise
const queryDb = function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject("hi");
}, 1000);
});
};
app.listen(8080, function () {
console.log("server running on 8080");
}); //the server object listens on port 8080
koa 1.0基于ES6编写,使用generator实现异步,代码看起来是下面这样,已经实现了同步写法写异步。
代码语言:javascript复制var koa = require('koa');
var app = koa();
app.use('/test', function *() {
yield doReadFile1();
var data = yield doReadFile2();
this.body = data;
});
app.listen(3000);
koa 2.0基于ES7编写,ES7引入了async/await关键字,使得同步写异步更加方便,于是koa2的异步代码看起来是这样的。
代码语言:javascript复制app.use(async (ctx, next) => {
await next();
var data = await doReadFile();
ctx.response.type = 'text/plain';
ctx.response.body = data;
});
本文的koa都是指koa 2.0版本。
更小更简洁
koa和express另一个区别在于,koa本身不包含任何的中间件,只是一个中间件框架,具体功能都是由各种外部的中间件实现的,而express自带了路由、模板、发送文件、jsonp等等功能,这也使koa框架自身更小更简洁。
使用
示例化应用程序
hello world