# koa的使用
cnpm i koa koa-better-body koa-convert koa-static koa-router koa-ejs koa-session -D
# koa
- 使用koa创建一个服务器
- 引入koa
- new koa()生成app
- 监听一个端口
const koa =require("koa")
const app =new koa()
app.listen(9000,()=>{
console.log(`server is start`)
})
- app.use()展现内容:地址栏地址
http://localhost:9000/index
const koa =require("koa")
const app =new koa()
app.listen(9000,()=>{
console.log(`server is start`)
})
app.use(async (ctx,next)=>{
ctx.response.body=ctx;
})
得到结果展现在页面上:其中 request和response 是koa封装的请求和响应,原生的请求和响应式 req和res
{
"request": {
"method": "GET",
"url": "/index",
"header": {
"host": "localhost:9000",
"connection": "keep-alive",
"cache-control": "max-age=0",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
"accept": "text/html,application/xhtml+xml,application/xml;
q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"accept-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9"
}
},
"response": {
"status": 200,
"message": "OK",
"header": {
"content-type": "application/json; charset=utf-8"
}
},
"app": {
"subdomainOffset": 2,
"proxy": false,
"env": "development"
},
"originalUrl": "/index",
"req": "<original node req>",
"res": "<original node res>",
"socket": "<original node socket>"
}
# koa-router
使用路由对请求进行命中,命不中的最后丢给app.use()去处理
- const router =require("koa-router")
- const r1= router()
- app.use(r1.routes())
- r1.get("/",(ctx,next)=>{ ctx.response.body="首页" })
const koa =require("koa")
const app= new koa()
const router =require("koa-router")
const r1= router()
app.use(r1.routes())
app.use(async (ctx,next)=>{
ctx.response.body=ctx;
})
r1.get("/",(ctx,next)=>{
ctx.response.body="首页"
})
r1.get("/index",(ctx,next)=>{
ctx.response.body="index"
})
app.listen(9000,()=>{
console.log(`server is start`)
})
# koa-static-cache
koa-static-cache第二次请求有缓存,对带宽友好,而koa-static配置缓存很不方便。
const koa =require("koa")
const app= new koa()
const router =require("koa-router")
const r1= router()
app.use(r1.routes())
const staticCache=require('koa-static-cache');
const pathlib=require('path')
r1.get("/",(ctx,next)=>{
ctx.response.body="首页"
})
r1.get("/index",(ctx,next)=>{
ctx.response.body="index"
})
app.listen(9000,()=>{
console.log(`server is start`)
})
# koa设置状态码和头部
r1.get("/",(ctx,next)=>{
ctx.response.status=403
ctx.response.set('a', 12);
ctx.response.body="首页1"
})
页面显示"首页1"
# koa-better-body koa-convert
- koa-convert为了让koa更好的兼容老版本的中间件
- koa-better-body处理数据post/get
......
const betterBody=require("koa-better-body")
const convert=require("koa-convert")
const pathlib=require('path')
app.use(convert(betterBody({
uploadDir: pathlib.resolve('./upload'),//指定文件上传路径
keepExtensions: true//文件是否需要扩展名
})));
app.use(async ctx=>{
let url=ctx.request.url;
if(url==="/aaa"){
ctx.body="ok"
}
console.log(ctx.request.fields);
console.log(ctx.request.files);
});
# koa-ejs模板语法
const koa =require("koa")
const app= new koa()
const ejs=require('koa-ejs');
const pathlib=require('path')
ejs(app, {
root: pathlib.resolve('template'),
layout: false,
viewExt: 'ejs'
});
app.use(async ctx=>{
await ctx.render('1', {
name: 'blue',
age: 18,
items:['v1','v2','v3']
});
});
app.listen(9000,()=>{
console.log(`server is start`)
})
1.ejs
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div class="">
<h1>标题</h1>
<div class="">
我叫<%=name%>,我<%=age%>岁
</div>
<ul>
<% items.forEach(function(item){%>
<li><%=item %></li>
<% }) %>
</ul>
</div>
</body>
</html>
# koa中的cookie
app.use(async(ctx,next)=>{
ctx.cookies.set("a",1999)
console.log(ctx.cookies.get("a"))
ctx.body=99
})
获取和修改cookie,可以使用ctx.cookies查看所有cookie