对koa已摩拳擦掌良久,恰遇koa2近来正式宣布,本日尝试着捣腾一番。所以本身对koa的进修算是从2.x最先,因为文档资本还不完整,预备踩着先辈们的肩膀,逐步入坑。
环境的搭建
node运转环境,官方文档标注node v4.0.0及以上版本。
babel,在运用async/await编程时babel是必需的,然则本人未运用async/await,而是运用传统的promise,所以未尝试装置babel。
基本知识入门级顺序
与大部分顺序员同胞一样样的习气,写一发hello world抚慰本身孤寂的心灵。
const Koa = require('koa');
let app = new Koa();
app.use(ctx => {
ctx.body = 'hello world';
});
app.listen(3000);
翻开浏览器,接见localhost:3000,亲热的hello world映入眼帘。
明白症结点
(运用上下文)context
援用官方诠释:
Koa Context 将 node 的 request 和 response 对象封装在一个零丁的对象内里,其为编> 写 web 运用和 API 供应了很多有效的要领。
很多 context 的接见器和要领为了便于接见和挪用,简朴的托付给他们的 ctx.request 和 ctx.response 所对应的等价要领, 比如说 ctx.type 和 ctx.length 代理了 response 对象中对应的要领,ctx.path 和 ctx.method 代理了 request 对象中对应的要领。
异步编程完成
koa1供应了generator体式格局,koa2引入async/await完成,而我独爱promise处理体式格局。
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
委曲有点手感,洗簌,睡觉,同志们晚安。