目录
一、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')
})
网友评论