• 跟我一起了解koa(三)


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

    //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);
    

    路由级中间件

    //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中的错误处理中间件

    //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);
    

    我们看下效果,就知道这个错误处理中间件到底是什么问题了

    4.koa中间件的执行流程

    //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('1、这是第一个中间件01');
        await next();
    
        console.log('5、匹配路由完成以后又会返回来执行中间件');
    })
    
    app.use(async (ctx,next)=>{
        console.log('2、这是第二个中间件02');
        await next();
    
        console.log('4、匹配路由完成以后又会返回来执行中间件');
    })
    
    router.get('/',async (ctx)=>{
    
        ctx.body="首页";
    
    })
    router.get('/news',async (ctx)=>{
    
        console.log('3、匹配到了news这个路由');
        ctx.body='这是一个新闻';
    })
    
    
    app.use(router.routes());   /*启动路由*/
    app.use(router.allowedMethods());
    app.listen(3004);
    

  • 相关阅读:
    系统程序员成长计划并发(二)(下)
    Web开发必知的八种隔离级别
    国产Android视频,Broncho A1
    Android中的BatteryService及相关组件
    Struts2输出XML格式的Result
    系统程序员成长计划并发(三)(上)
    入选”第一期中国最受欢迎50大技术博客”
    Broncho团队招聘应届毕业生(包括大四学生) 2名
    系统程序员成长计划并发(三)(下)
    WordPress MailUp插件‘Ajax’函数安全绕过漏洞
  • 原文地址:https://www.cnblogs.com/smart-girl/p/11195809.html
Copyright © 2020-2023  润新知