Koa2教程(常用中间件篇)

作者: 简栋梁 | 来源:发表于2019-06-17 17:11 被阅读0次

    目录
    一、koa-bodyparser
    二、koa-router
    三、koa-views + ejs
    四、koa-static
    五、koa-session
    六、koa-jwt
    七、koa-helmet
    八、koa-compress
    九、koa-logger
    十、koa-convert
    十一、koa-compose
    十二、koa-http-request
    十三、koa-conditional-get
    十四、koa-csrf
    十五、koa-ejs
    十六、koa-etag
    十七、koa-favicon
    十八、koa-generic-session
    十九、koa-onerror
    二十、koa-redis
    二十一、koa-resource-router
    二十二、koa-rewrite
    二十三、koa-rt
    二十四、koa-safe-jsonp
    二十五、koa-static-cache

    系列教程
    Koa2教程(初识篇)
    Koa2教程(入门篇)


    一、koa-bodyparser[1]

    1、功能:解析请求体
    2、官网
    3、代码实现
    const Koa = require('koa');
    const app = new Koa();
    const bodyParser = require('koa-bodyparser');
     
    app.use(bodyParser());
     
    app.use(async(ctx)=>{
        if(ctx.url === '/' && ctx.method === 'GET'){
            //显示表单页面
            let html=`
                <h1>Koa2 request POST</h1>
                <form method="POST" action="/">
                    <p>userName</p>
                    <input name="userName" /><br/>
                    <p>age</p>
                    <input name="age" /><br/>
                    <button type="submit">submit</button>
                </form>
            `;
            ctx.body=html;
        }else if(ctx.url === '/' && ctx.method === 'POST'){
             let postData = ctx.request.body;
             ctx.body = postData;
        }else{
            ctx.body = '<h1>404!</h1>';
        }
    });
    
    app.listen(3000, () => {
        console.log('[demo] server is starting at port 3000');
    });
    

    二、koa-router[2]

    1、功能:路由
    2、官网
    3、基础格式
    const Koa = require('koa');
    const Router = require('koa-router');
     
    const app = new Koa();
    const router = new Router();
     
    //实现 '/'、'/koa'两个路由层级
    router
        .get('/',(ctx,next)=>{
            ctx.body="Index page";
        })
        .get('/koa',(ctx,next)=>{
            ctx.body="Koa page";
        });
     
    app
      .use(router.routes())
      .use(router.allowedMethods());
      
    app.listen(3000,()=>{
        console.log('starting at port 3000');
    });
    
    4、路由层级

    (1)全局层级

    //所有路由必须加上一个tony父层级,才能被访问
    const router = new Router({
          prefix: '/tony'
    })
    

    (2)局部层级

    const Koa = require('koa');
    const app = new Koa();
    const Router = require('koa-router');
    
    //实现'/home'、'/page'两个子路由层级,以及各自的两个孙子路由层级
    
    //子路由
    let home = new Router();
    home
        .get('/',async(ctx)=>{
            ctx.body="Home";
        })
        .get('/one',async(ctx)=>{
            ctx.body="Home one";
        })
        .get('/two',async(ctx)=>{
            ctx.body ='Home two';
        })
    
    let page = new Router();
    page
        .get('/',async(ctx)=>{
            ctx.body="Page";
        })
        .get('/one',async(ctx)=>{
            ctx.body="Page one";
        })
        .get('/two',async(ctx)=>{
            ctx.body ='Page two';
        })
    
    //总路由,装载子路由
    let router = new Router();
    router.use('/home',home.routes(),home.allowedMethods());
    router.use('/page',page.routes(),page.allowedMethods());
    
    //加载路由中间件
    app.use(router.routes()).use(router.allowedMethods());
    
    app.listen(3000,()=>{
        console.log('[demo] server is starting at port 3000');
    });
    

    三、koa-views + ejs[3]

    1、功能:视图模板渲染
    2、koa-views官网 && ejs官网
    3、在根目录下,新建views文件夹,并添加index.ejs
    <!-- index.ejs -->
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title><%=title%></title>
        </head>
        <body>
            <h1><%=title%></h1>
        </body>
    </html>
    
    4、代码实现
    const Koa = require('koa')
    const views = require('koa-views')
    const path = require('path')
    const app = new Koa()
    
    // 定位模板文件目录,并选择模板引擎
    app.use(views(path.join(__dirname, './views'), {
      extension: 'ejs'
    }))
    
    app.use( async ( ctx ) => {
      let title = 'hello koa2'
      //渲染index.ejs,并传入title变量
      await ctx.render('index', {
        title
      })
    })
    
    app.listen(3000,()=>{
        console.log('[demo] server is starting at port 3000');
    })
    

    四、koa-static[4]

    1、功能:处理静态资源
    2、官网
    3、代码实现
    const Koa = require('koa')
    const path = require('path')
    const static = require('koa-static')
    
    const app = new Koa()
    
    const staticPath = './static'
    
    //即可直接通过'./static',访问到静态资源
    app.use(static(
      path.join(__dirname, staticPath)
    ))
    
    app.use( async ( ctx ) => {
      ctx.body = 'hello world'
    })
    
    app.listen(3000, () => {
      console.log('[demo] static-use-middleware is starting at port 3000')
    })
    

    五、koa-session

    1、功能:session验证
    2、官网

    六、koa-jwt

    1、功能:token验证
    2、官网

    七、koa-helmet

    1、功能:网络安全
    2、官网

    八、koa-compress

    1、功能:压缩响应体
    2、官网

    九、koa-logger

    1、功能:输出请求日志
    2、官网

    十、koa-convert

    1、功能:旧中间件(基于generate)、新中间件(基于promise)之间的互相转换
    2、官网

    十一、koa-compose

    1、功能:合并中间件
    2、官网

    十二、koa-http-request

    1、功能:
    2、官网

    十三、koa-conditional-get

    1、功能:
    2、官网

    十四、koa-csrf

    1、功能:
    2、官网

    十五、koa-ejs

    1、功能:
    2、官网

    十六、koa-etag

    1、功能:
    2、官网

    十七、koa-favicon

    1、功能:
    2、官网

    十八、koa-generic-session

    1、功能:
    2、官网

    十九、koa-onerror

    1、功能:
    2、官网

    二十、koa-redis

    1、功能:
    2、官网

    二十一、koa-resource-router

    1、功能:
    2、官网

    二十二、koa-rewrite

    1、功能:
    2、官网

    二十三、koa-rt

    1、功能:
    2、官网

    二十四、koa-safe-jsonp

    1、功能:
    2、官网

    二十五、koa-static-cache

    1、功能:
    2、官网

    1. 回到koa-bodyparser

    2. 回到koa-router

    3. 回到koa-views + ejs

    4. 回到koa-static

    相关文章

      网友评论

        本文标题:Koa2教程(常用中间件篇)

        本文链接:https://www.haomeiwen.com/subject/hxvafctx.html