zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Koa2教程(常用中间件篇)

中间件教程 常用 Koa2
2023-09-27 14:29:06 时间

目录
一、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



作者:简栋梁
链接:https://www.jianshu.com/p/f69852835699
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。