跟我一块儿了解koa(三)

跟我一块儿了解koa中间件
1、是 什么是 Koa 的中间件
通俗的讲: :中间件就是匹配路由以前或者匹配路由完成作的一系列的操做,咱们就能够
把它叫作中间件。
在 在express件 中间件( (Middleware )是一个函数,它能够访问请求对象(request object (req)),
响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一
般被命名为 next 的变量。在 Koa 中中间件和 express 有点相似。
中间件的功能包括:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。
若是个人 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹
配了。若是想往下匹配的话,那么须要写 next()
2、Koa 应用可以使用以下几种中间件:
应用级中间件
路由级中间件
错误处理中间件
第三方中间件
1.应用级中间件web

//app.js
//在匹配路由以前,会打印出时间
//引入 koa模块

var Koa=require('koa');
var router = require('koa-router')();  /*引入是实例化路由** 推荐*/
var app=new Koa();
//Koa中间件

//匹配任何路由  ,若是不写next,这个路由被匹配到了就不会继续向下匹配
// 匹配路由以前打印日期
app.use(async(ctx,next)=>{
    console.log(new Date())
    await next()
})
router.get('/',async(ctx)=>{
    ctx.body = "首页"
})
router.get('/news',async(ctx)=>{
    ctx.body = "新闻列表页面"
})
router.get('/login',async(ctx)=>{
    ctx.body = "新闻登陆页面"
})
app.use(router.routes())//启动路由
app.use(router.allowedMethods());
app.listen(3004);

路由级中间件express

//app1.js

//引入 koa模块

var Koa=require('koa');
var router = require('koa-router')();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,若是不写next,这个路由被匹配到了就不会继续向下匹配


router.get('/',async (ctx)=>{

    ctx.body="首页";

})
// 匹配到news路由之后继续向下匹配路由
router.get('/news',async (ctx,next)=>{
    console.log('这是一个新闻1');

    await next();
})
router.get('/news',async (ctx)=>{

    ctx.body='这是一个新闻';
})

router.get('/login',async (ctx)=>{
    ctx.body="新闻列表页面";
})


app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

效果图

koa中的错误处理中间件app

//app2.js
var Koa = require('koa')
var router = require('koa-router')()
var app = new Koa()
app.use(async(ctx,next)=>{
    console.log('这是一个中间件01')
    next()
    if(ctx.status == 404){
        ctx.status = 404
        ctx.body = '这是一个404页面'
    }else{
        console.log(ctx.url)
    }
})
router.get('/',async (ctx)=>{

    ctx.body="首页";

})
router.get('/news',async (ctx)=>{
    console.log('这是新闻2');
    ctx.body='这是一个新闻';
})
router.get('/login',async (ctx)=>{
    ctx.body="新闻列表页面";
})
app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3003);

咱们看下效果,就知道这个错误处理中间件究竟是什么问题了
koa

4.koa中间件的执行流程async

//app3.js

//引入 koa模块

var Koa=require('koa');
var router = require('koa-router')();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,若是不写next,这个路由被匹配到了就不会继续向下匹配

//www.域名.com/news
app.use(async (ctx,next)=>{
    console.log('一、这是第一个中间件01');
    await next();

    console.log('五、匹配路由完成之后又会返回来执行中间件');
})

app.use(async (ctx,next)=>{
    console.log('二、这是第二个中间件02');
    await next();

    console.log('四、匹配路由完成之后又会返回来执行中间件');
})

router.get('/',async (ctx)=>{

    ctx.body="首页";

})
router.get('/news',async (ctx)=>{

    console.log('三、匹配到了news这个路由');
    ctx.body='这是一个新闻';
})


app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3004);

相关文章
相关标签/搜索