对koa已经跃跃欲试好久,恰遇koa2最近正式发布,今天尝试着倒腾一番。因此本身对koa的学习算是从2.x开始,因为文档资源还不彻底,准备踩着前辈们的肩膀,慢慢入坑。javascript
node运行环境,官方文档标注node v4.0.0及以上版本。java
babel,在使用async/await编程时babel是必须的,可是本人未使用async/await,而是使用传统的promise,因此何尝试安装babel。node
与大部分程序员同胞同样样的习惯,写一发hello world慰藉本身孤寂的心灵。程序员
const Koa = require('koa'); let app = new Koa(); app.use(ctx => { ctx.body = 'hello world'; }); app.listen(3000);
打开浏览器,访问localhost:3000,亲切的hello world映入眼帘。web
(应用上下文)context编程
引用官方解释:promise
Koa Context 将 node 的 request 和 response 对象封装在一个单独的对象里面,其为编> 写 web 应用和 API 提供了不少有用的方法。浏览器
许多 context 的访问器和方法为了便于访问和调用,简单的委托给他们的 ctx.request 和 ctx.response 所对应的等价方法, 好比说 ctx.type 和 ctx.length 代理了 response 对象中对应的方法,ctx.path 和 ctx.method 代理了 request 对象中对应的方法。babel
koa1提供了generator方式,koa2引入async/await实现,而我独爱promise处理方式。app
app.use((ctx, next) => { const start = new Date(); return next().then(() => { const ms = new Date() - start; ctx.body += `1:${ctx.method} ${ctx.url} - ${ms}ms \n`; }); }); app.use((ctx, next) => { const start = new Date(); return next().then(() => { const ms = new Date() - start; ctx.body += `2:${ctx.method} ${ctx.url} - ${ms}ms \n`; }); }); app.use((ctx, next) => { ctx.body = 'first exec \n'; });
访问localhost:3000/index,最终结果:
first exec 2:GET /index - 0ms 1:GET /index - 0ms
勉强有点手感,洗簌,睡觉,同志们晚安。