koa的安装 安装
1 2 npm init npm install koa
第一个hello world 1 2 3 4 5 6 7 8 9 10 11 var Koa = require ('koa' );var app = new Koa ();app.use (ctx => { console .log (ctx.request ,ctx.response ); ctx.body = 'hello world!' ; }) app.listen (3000 ); console .log ('server is listen on 3000' );
控制台结果:
1 2 λ node koatest2.js server is listen on 3000
浏览器输入127.0.0.1:3000:
ps: var Koa = require('koa'); 如果K是大写就是koa2,小写就是koa,详细差异自己百度啦。
Koa中间件的级联 洋葱模型:
比如下面这段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 var Koa = require ('koa' );var app = new Koa ();app.use (async (ctx, next) => { var start = new Date ; await next (); var ms = new Date - start; ctx.set ('X-Response-Time' , 10 + 'ms' ); }); app.use (async (ctx, next) => { var start = new Date ; await next (); var ms = new Date - start; console .log ('%s %s - %s' , ctx.method , ctx.url , ms); }); app.use (async (ctx) => { ctx.body = 'hello world' ; }); app.listen (3000 ); console .log ('server is listen on 3000' );
控制台输出:
1 2 3 4 λ node koatest2.js server is listen on 3000 GET / - 2 GET /favicon.ico - 1
执行顺序如图中:(1)->(2)->(3)->(4)->(5)。
关于async和await 不说其他的异步写法,单说这个async的写法,我的个人理解是: 比如有这样一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 function getInfoById (id,callback ){ ... ... callback (info); } function getUserNameByInfo (info,callback ){ ... ... callback (name); } function getUserNameById (id ){ getInfoById (id,function (data ){ if (data){ var info = data; getUserNameByInfo (info,function (data ){ if (data){ var name = data; console .log (name); } }); } }); }
上面这种就是最常规的js异步回调函数,因为下一个函数的参数依赖于上一个函数的执行结果,如果不写成回调,就会报错,说值为undefined等。 然后es7引入新语法,注意是es7规范。node v8以上才支持,低版本v7有其他方式支持,但是现在的新版node.js是天然支持的,很好用!!! 比如上面那段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function getInfoById (id,callback ){ ... ... callback (info); } function getUserNameByInfo (info,callback ){ ... ... callback (name); } aync function getUserNameById (id ){ let info = await getInfoById (id); let name = await getUserNameByInfo (info); console .log (name); }
简直惊呆了有木有!谁他喵的还写回调地狱哦。
上面那种写法要注意:
async 卸载function前面代表这是一个异步函数
await只有在异步函数里面才可以使用,不然会报错的哦
暂时不知道了,想到了再补充…
PS:其实koa我用别人的demo都搭了一个主页 了,只不过不太好看,并且是前后端一起写的,很乱。。有时间了换一个,然后再系统的看一下这个框架,学新不学旧嘛。。况且express的话我做项目也有接触到。基数大但是总是要被迭代掉的吧。