Koa(一、get传值,路由,中间件,洋葱图,ejs)

回调相关案例

async function test(){
    return "测试";
}
console.log(test()) //Promise { '测试' }

function test(){
    return "测试";
}
console.log(test()) //'测试' 

async function test(){
    return "测试";
}
let p=test();
p.then((data)=>{
    console.log(data)//测试
})
let fs=require("fs");
async function readTxt(){
   let info=await new Promise((resolve,reject)=>{
        fs.readFile('./package.json',function(err,data){
            resolve(data.toString());
        })
   })
   console.log(info);//输出文件内容
}
readTxt();
说明:await必须使用在async中,async返回的是一个promise。被async修饰的函数,是异步函数,不会阻塞下面代码的执行。

Koa

获取get传值

  • 接收get传值,ctx有query(格式话好的参数对象)和querystring(请求字符串)两种方式,两种都是属性不是方法
  • 也可以通过ctx.requset.query/querystring获取
  • 还可以通过ctx.url/ctx.request.url间接获取('/?aid=30&name=zhangsan')

动态路由

router.get('/news/:aid',async(ctx)=>{
    //http://127.0.0.1:3000/news/asfnca
    console.log(ctx.params);//{ aid: 'asfnca' }
    ctx.body="新闻页面"+ctx.params.aid;
})
router.get('/news/:aid/:cid',async(ctx)=>{
    //http://127.0.0.1:3000/news/asfnca/asdfsa
    console.log(ctx.params);//{ aid: 'asfnca', cid: 'asdfsa' }
    ctx.body="新闻页面"+ctx.params.aid+".."+ctx.params.cid;
})

中间件

  • 应用级中间件代码位置不论在哪里,都是先执行完应用级中间件才开始走路由和路由级中间件
  • 匹配路由之前或匹配之后所完成的一系列的操作。
const koa = require('koa'),
    router = require('koa-router')(),
    app = new koa();

//只写一个参数,表示匹配所有路由
app.use(async (ctx, next) => {
    console.log(Date.now())
    //应用级中间件
     next();
     //错误处理中间件
     if(ctx.status==404){
         ctx.status=404;
         ctx.body="404";
     }
})
//配置路由
router.get('/', async (ctx,next) => {
    ctx.body = "首页";
    //路由级中间件
    await next();
})
router.get('/news/:aid', async (ctx) => {
    ctx.body = "新闻页面";
})


app.use(router.routes())
    .use(router.allowedMethods());
app.listen(3000);

洋葱图

koa洋葱图.png

ejs模板

  • 所有模板引擎使用都需要预先安装koa-views
  • cnpm i koa-views --save
  • cnpm i ejs --save

模板引擎引入有两种方式

方式一:
views=require('koa-views')
app.use(views('views',{
    extension:'ejs'
}));
说明:该种方式设置模板引擎必须设置模板文件后缀名为.ejs
方式二:
app.use(views('views',{map:{html:'ejs'}}));
说明:该种方式配置模板,后缀名是.html

ejs模板语法

index.ejs:




    
    
    
    Document



    
    <% include public/header.ejs %>
        
    <% for(let a=0;a
  • <%=arr[a]%>
  • <%}%>
<%-htmls%> 判断语句 <%if(flag) { %>
true
<%}else{%>
false
<%}%> <%=names%> <%=age%> header.ejs:

<%=title%>

index.js中的数据配置: 全局数据: //ejs渲染公共数据 app.use(async(ctx,next)=>{ ctx.state={ names:"qiang", age:12 } await next(); }) 局部数据: //渲染界面并且传递 await ctx.render('index',{ title:"标题信息", arr:["a","b","c","d"], htmls:"

H2标签

", flag:true });
ejs截图.png

你可能感兴趣的:(Koa(一、get传值,路由,中间件,洋葱图,ejs))