1.使用并安装koa-generator:npminstall-gkoa-generator创建项目:koa2-eproject(-e指ejs模板)输入项目安装依赖包:npminstall启动项目npmstart(hotupdate选择npmrundev)当项目出现:nodebin/www表示项目已经运行#npminstall-gkoa-generator#koa2-eproject#cdproject#npminstall#npmrundev2、koa异步操作asyncasync的概念和使用场景?async用于定义返回AsyncFunction对象的异步函数,该对象通过隐式Promise返回其结果。如果您在代码中使用异步函数,它会以同步方式执行异步代码;使用场景:连续异步请求下,下一次异步请求依赖于上一次异步请求的结果。复习promise和async的区别?Promise是通过回调函数不断调用.then方法,执行后面方法的连续运行;async使用同步写入来执行异步代码并获取执行结果。Async实际上是Promise的语法糖。它写得更优雅。它更具可读性。解耦高的时候什么时候用await?当外层函数有async时,有可能里面没有await;如果函数内部有await,外层必须有async。否则会报错。await后面肯定有一个Promise对象,如果不自动打包成Promise对象,其实async就是Promise的语法糖,帮助我们在内部处理index.js#node中的全局对象不是window,就是global#ctx:ctxobjecthanging加载完所有信息后,就可以拿到context中的request和response对象;router.get('/testAsync',async(ctx,next)=>{global.console.log('start',newDate().getTime());leta=awaitnewPromise((resolve,reject)=>{setTimeout(()=>{global.console.log('asynca',newDate().getTime());resolve('a')},1000)})letb=await'b';ctx.body={a,b}})三、koa中间件创建方法及基本使用创建中间件文件夹middleware创建我们自己在middleware中间件中,如:koa-pv.js写法。最后,export必须是一个函数,同样需要返回一个异步函数,并且必须调用函数参数next()(因为下一个中间件是在当前中间件运行完毕后调用的,next相当于一个trigger)和在app.js中引入自己的中间件app.use("自己中间件导入的名称")来引用koa-pv.js#mkdirmiddleware#touchmiddleware/koa-pv.jsfunctionpv(ctx){global.console.log(`pv:${ctx.path}`)}module.exports=function(){returnasyncfunction(ctx,next){global.console.log(`pvstart`)pv(ctx)awaitnext()//中间件运行完毕调用next后,next相当于触发global.console.log(`pvend`)}}app.jsconstKoa=require('koa')constapp=newKoa()constpv=require('./middleware/koa-pc')app.use(pv());刷新页面,在我们的控制台中,我们可以看到刚才打印在我们中间的内容。koa中间件的原理先看上图。Koa也是一个服务端框架,接受所有浏览器的请求,通过内部操作(ctx)返回,响应给浏览器。洋葱形的扩展实际上是中间件。比如注册管理器,重定向等中间件都会在我们的项目初始化的时候执行。下面说一下中间件的介绍和执行顺序。其实我们看到洋葱圈是一个整体,进来的时候执行,出去的时候执行。不管在哪里,都会被执行。所以他的引用顺序和代码顺序是可以不一致的,代码最终会在执行机制中倒退。一进一出。4.koa路由进入routes目录,创建我们相关的路由文件导入koa-router,编写接口,最后exportrouter导入app.js中,使用login.js#touchroutes/login.jsconstrouter=require('koa-router')()router.prefix('/login')//前缀对应页面。模块化区分router.get('/',async(ctx,next)=>{awaitctx.render('login',{title:'Hellologin!'})}router.get('/bar',async(ctx,next)=>{ctx.body={code:0,data:{count:1}}})module.exports=routerapp.js#在app.js中引入login.jsconstkoa=require('koa')constapp=newKoa()constlogin=require('./routes/login')app.use(login.routes(),login.allowedMethods())五、koa中cookie的使用?看ctx。Cookies.get('pvid')写ctx.cookies.set('pvid',Math.random())需要的时候看API。constrouter=require('koa-router')()router.prefix('/login')router.get('/',async(ctx,next)=>{ctx.cookies.set('pvid',Math.random())awaitctx.render('login',{title:'Hellologin!'})})router.get('/bar',async(ctx,next)=>{ctx.body=ctx.cookies.get('pvid');})module.exports=路由器
