koa2.x学习路由koa-routerconstrouter=require('koa-router')()ctx:封装请求和响应变量next:传入下一个要处理的异步函数,标记为asyncA函数称为异步函数。在异步函数中,您可以使用await调用另一个异步函数。这两个关键字将在ES7中引入。${ctx.request.url}输出请求的url地址ctx.url相当于ctx.request.url,ctx.type相当于ctx.response.type处理router的操作分为:views,string,json,处理get请求,处理post请求.get('/string',async(ctx,next)=>{ctx.response.body=`
欢迎,你好
`;})jsonrouter.get('/json',async(ctx,next)=>{ctx.body={title:'koa2json'}})processgetrequestvarname=ctx.params.name;router.get('/info/:name',async(ctx,next)=>{varname=ctx.params.name;ctx.response.body=`
Hello,${name}!
`;})处理发布请求varname=ctx.request.body.name||'';required引入koa-bodyparser中间件,创建处理form的info.pugextendslayoutblockcontenth1=titleform(action="/signin"method="post")p='username:'input(type="text"name="name"value="koa")p='密码:'input(type="password"name="password"value="koa")pinput(type="submit"value="submit")路由r.get('/info',async(ctx,next)=>{awaitctx.render('info',{title:'UserInformation'});})//处理post请求router.post('/signin',async(ctx,next)=>{varname=ctx.request.body.name||'';varpassword=ctx.request.body.password||'';if(name==='koa'&&password==='koa'){ctx.response.body=`
欢迎,${name}
`;}else{ctx.response.body=`
登录失败!
登录
`}})view-views层适用于koa的模板引擎有很多,比如jade,ejs,nunjucks,handlebars,x模板等Nunjucks是Mozilla开发的纯JavaScript模板引擎koa-nunjucks-2^3.0.2https://mozilla.github.io/nun...constkoaNunjucks=require('koa-nunjucks-2')app.use(koaNunjucks({ext:'html',path:path.join(__dirname,'views'),nunjucksConfig:{trimBlocks:true,noCache:false//在开发环境中}}));//module{%extends'base.html'%}{%blockbody%}
Nobody
{%endblock%}//Loop{%formsgindata%}
{{msg}}
{%endfor%}{%ifhungry%}我饿了{%eliftired%}我累了{%else%}我很好!{%endif%}cookiekoa操作提供了从上下文中直接读写cookie的方法:ctx.cookies.get(name,[options])在context请求中读取cookiectx.cookies.set(name,value,[options])在context中写入cookie//processcookierouter.get('/cookie',async(ctx,next)=>{constoptions={domain:'127.0.0.1',path:'/',maxAge:10*60*1000,//有效cookie过期:newDate('2019-02-02'),//cookie过期时间httpOnly:false,//是否只在http请求中使用getoverwrite:false//是否允许重写}ctx.cookies.set('id','testcookie',options)ctx.response.body=`
cookies,${ctx.cookies.get('id')}
`;//输出cookie值})操作session并将session存入MySQL数据库koa-session-minimal,koa-mysql-session"koa-session-minimal":"^3.0.4","koa-mysql-session":"^0.0.2"constsession=require('koa-session-minimal')constMysqlSession=require('koa-mysql-session')//配置存储sessionletstore=newMysqlSession({user:'root',password:'',database:'test',host:'127.0.0.1',})letcookie={maxAge:'',//cookie有效时间expires:'',//cookie过期时间path:'',//写入cookie的路径domain:'',//写入cookie所在的域名httpOnly:'',//是否仅用于http请求获取overwrite:'',//是否允许重写secure:'',sameSite:'',signed:'',}app.use(session({key:'SESSION_ID',store:store,cookie:cookie}))//processsessionrouter.get('/session',async(ctx,next)=>{ctx.session={user_id:Math.random().toString(36).substr(2),count:0}ctx.response.body=`
会话,${ctx.session.user_id},${ctx.session.count}
`;//输入cookie值})操作mysql安装mysql"mysql":"^2.15.0"用户增加、删、改、查//查询asyncfunctionqueryAll(){letsql=usersMapping.queryAll;让UsersList=awaitdbUtils(sql);returnUsersList;}//新增异步函数insertUser(username,password,realname){letsql=usersMapping.insertUser;varvalues=[用户名,密码,真实姓名];//数组letresult=awaitdbUtils(sql,values);if(Array.isArray(result)&&result.length>0){result=result[0]}else{result=null}returnresult}//修改异步函数queryById(id){letsql=usersMapping.queryById;让result=awaitdbUtils(sql,id);if(Array.isArray(result)&&result.length>0){result=result[0]}else{result=null}returnresult}asyncfunctionupdateUser(id,username,password,realname){//从session中取idletsql=usersMapping.updateUser;变量值=[u用户名,密码,真实姓名,id];//数组letresult=awaitdbUtils(sql,values);if(Array.isArray(result)&&result.length>0){result=result[0]}else{result=null}returnresult}//删除异步函数deleteById(id){letsql=usersMapping.deleteById;让flag=awaitdbUtils(sql,id);返回标志;}github:https://github.com/lichuang44...