Koa2教程(常用中间件篇)
目录
一、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
一、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、官网
作者:简栋梁
链接:https://www.jianshu.com/p/f69852835699
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- Nodejs 进阶:Express 常用中间件 body-parser 实现解析
- SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理
- Laravel最佳实践--API请求频率限制(Throttle中间件)
- koa 基础(十二)koa-static 静态资源中间件 静态web服务
- 国内首个分布式消息队列技术标准发布,推动云原生中间件技术落地
- 渗透测试-中间件日志包含绕过和php文件读写包含
- 2022 大厂面试秘籍 Java 岗:中间件 + 算法 +HTTP+ 线程 + 虚拟机 + 分布式
- 储物柜soket通信协议和中间件实现技术细节
- 消息队列中间件的技术选型分析
- MySQL中间件之ProxySQL(9):ProxySQL的查询缓存功能
- .Net Core 中使用NLog作为日志中间件
- sharding-jdbc,轻量级数据库分库分表中间件
- mysql中间件研究(tddl atlas cobar sharding-jdbc)
- ThinkPHP 5.1 跨域中间件
- 【沉淀】从网络中间件到搜索,从移动开发到分布式计算平台,阿里高级专家李睿博谈自己的折腾路
- 中间件:Redis-x64-5.0.14.1高可用集群-哨兵(Sentinel)模式(Win10)
- 阿里开源中间件canal实现mysql数据库同步,零侵入不写代码实现,也可以通过整合到项目程序实现更加灵活的控制,简单几步实现高性能准实时多数据库多数据表的数据同步,可在windows和Linux部署
- node的express中间件之session