koa2 入门学习(一)

koa2 入门

    koa2是什么
    koa2基本用法
    koa2进阶

一、koa2是什么
    官网地址:https://koa.bootcss.com/
    1.基于nodejs平台的下一代web开发框架
    2.Express原班人马打造,更精简
    3.Async+await处理异步
    4.洋葱圈型的中间件机制

二、koa2基本用法
    demo:
      初始化:
        mkdir koa-demo
        cd koa-demo
        npm init
        npm install koa --save
      新建server.js
        const Koa = require('koa')
        const app = new Koa()

        app.use(async (ctx, next) => {
            ctx.body = 'hello koa'
        })

        app.listen('3000')
      启动程序:
        node server.js
      访问:
        localhost:3000
    
    demo代码:
        ctx: 封装了request和response的上下文
        Next: 下一个中间件(洋葱圈模型:每个中间件都是一个"环")
        App: 启动应用
    
    demo升级:
        const Koa = require('koa')
        const app = new Koa()

        app.use(async(ctx, next)=>{
            ctx.body = '1'
            //下一个中间件
            next()
            ctx.body += '2'
        })

        app.use(async(ctx, next)=>{
            ctx.body += '3'
            //下一个中间件
            next()
            ctx.body += '4'
        })

        app.use(async(ctx, next)=>{
            ctx.body += '5'
            //下一个中间件
            next()
            ctx.body += '6'
        })

        app.listen('3000')
      
      执行程序:
        node server.js
      访问:localhost:3000,输出:135642(思考下顺序!洋葱圈模型)
      
      总结:
        app.use(async(ctx, next)=>{
            // app.use 这就是个中间件,next就是执行下个中间件
        })
      
      问题:
        app.use(async(ctx, next)=>{
            ctx.body = '1'
            //下一个中间件
            setTimeout(()=>{
                next()
            }, 2000)
            ctx.body += '2'
        })
        -- 说明:执行结果为 12,js中的setTimeout并非阻塞的,执行1之后,会执行2,再执行setTimeout时,程序已经结束

三、async+await优雅处理异步    
    1.问题代码(无法完成同步)
    
        function ajax(){
            setTimeout(()=>{
                console.log('你好')
            }, 1000)
        }
        ajax()
        console.log("执行结束")
        
        执行:
            node xxx.js
        结果:
            执行结束
            你好
        
    2.问题代码(回调地狱:可以实现一个回调成功在执行下一个回调)
        function ajax(fn){
            setTimeout(()=>{
                console.log('你好')
                fn()
            }, 1000)
        }

        ajax(() =>{
            ajax(() =>{
                ajax(() =>{
                    console.log("执行结束3")
                })
                console.log("执行结束2")
            })
            console.log("执行结束1")
        })
        
        执行:
            node xxx.js
        结果:
            你好
            执行结束1
            你好
            执行结束2
            你好
            执行结束3
        思考:
            这种回调,同一层之间是同步顺序的,嵌套的的层之间执行时异步的
    
    3.改进(promise)
        function delay(word){
            return new Promise((resolve, reject)=>{
                setTimeout(()=>{
                    resolve(word)
                },2000)
            })
        }
        //delay函数返回的是一个promise对象,可以有.then的链式输出方法,还有.catch的debug方法
        delay('孙悟空')
            .then((word)=>{
                console.log(word)
                return delay('猪八戒')
            })
            .then((word)=>{
                console.log(word)
                return delay('沙悟净')
            })
            .then((word)=>{
                console.log(word)
            })
    4.async+await(一起使用的)优雅处理异步
        function delay(word){
            return new Promise((resolve, reject)=>{
                setTimeout(()=>{
                    resolve(word)
                },2000)
            })
        }
        // await是在async函数的内部使用的,即必须等待一个异步的函数结束
        async function start(){
            const word1 = await delay('孙悟空')
            console.log(word1)
            const word2 = await delay('猪八戒')
            console.log(word2)
            const word3 = await delay('沙悟净')
            console.log(word3)
        }
        start()    
        执行结果:
            孙悟空
            猪八戒
            沙悟净
四、koa路由实现 koa-router https://github.com/ZijianHe/koa-router
    1.在客户端安装koa-router
        npm install koa-router --save
    2.使用示例:
        const Koa = require('koa')
        const Router = require('koa-router')

        const app = new Koa()
        const router = new Router()
        // 使用koa-logger.js组件
        const koaLog = require('./koa-logger')


        router.get('/', (ctx, next)=>{
            ctx.body ='孙悟空'
        })
        router.get('/zhubajie', (ctx, next)=>{
            ctx.body ='猪八戒'
        })

        //在最外层中间件开始计算耗时
        app.use(koaLog)

        app.use(router.routes())
           .use(router.allowedMethods())

        app.listen('3000')

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值