# koa的使用

 cnpm i koa koa-better-body koa-convert koa-static koa-router koa-ejs koa-session -D

# koa

  • 使用koa创建一个服务器
    1. 引入koa
    2. new koa()生成app
    3. 监听一个端口
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

最后更新: 1/10/2021, 12:12:28 PM