KOA是express原班人马倾情打造新型web框架,旨在提供更小、更丰富、更稳健web应用程序和API,之前了解过express,体验上KOA更轻松,更容易理解,而不是被各种异步、回调弄得头昏眼花。
下面开始我们的KOA之旅:
1. 随便新建一个目录:
/koa-practise
2. 安装koa
一般来说,我们可能会认为koa像其他工具一样,在全局环境中安装命令行再使用。但koa不用,哪儿需要,就在哪儿npm install一下,可以说是便携式地。
npm install koa
我们将会用到很多async函数(就是一种将异步函数同步化的技术),如果你的node版本小于7.6,推荐使用babel's require hook
require('babel-core/register');
// require the rest of the app that needs to be transpiled after the hook
const app = require('./app');
为了解析和转换async函数,你至少使用Async to generator transform
或transform-async-to-module-method两个插件的其中一个,就是说在.babelrc文件中做如下配置:
{
"plugins": ["transform-async-to-generator"]
}
你也可以预设配置环境使用指定"node":"current"
3. 跑起来!
在第一步中建好的根目录下,新建一个主应用程序文件/koa-practise/MyApp.js:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
接着像运行其他node应用程序一样输入:
node MyApp.js
找个浏览器,输入localhosta:3000
不出意外,应该看到了温暖的hello world
级联
这里介绍一下级联,先来看看下面的例子:
const Koa = require('koa');
const app = new Koa();
// x-response-time
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${ms}ms`);
});
// logger
app.use(async (ctx, next) => {
const start = Date.now();
await next();
const ms = Date.now() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}`);
});
// response
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
上面代码中,从接受request开始,总共经历x-response-time、logger、response三个中间件,他们的执行顺序是这样的。x-response-time中创建start静态变量后,入到Next()方法,既随传递给logger中间件。logger是x-response-time的下行中间件,logger中也有next()方法,跟x-response-time一样,logger将进入response中间件。到了response中间件里,执行完其内容,就将控制权交给其上行中间件,即logger,logger中间件继续执行next()后面的语句。以此类推,最终执行完x-response-time中间件,最终返回res到客户端。
就是这样:-D