=================================================================================
安装koa终端输入npm install koa --save
运行的时候是终端输入node 文件名
// import Koa from 'koa'//ES6语法
const Koa = require('koa')//只能以commonJS导入
const app = new Koa()
//结果1 3 5 6 4 2
app.use(async(ctx,next)=>{//ctx是存放上下文,next是指向下一个中间件
ctx.body='1'
next()//用于跳转到下一个中间件,否则会执行完当前中间件就终止
ctx.body+='2'
})
app.use(async(ctx,next)=>{
ctx.body+='3'
next()
ctx.body+='4'
})
app.use(async(ctx,next)=>{
ctx.body+='5'
next()
ctx.body+='6'
})
app.listen(3000)//监听端口
中间件洋葱圈模型:
asnyc+await的例子:
function delay(word){
return new Promise((resolve,reject)=>{
setTimeout(() => {
resolve('hello'+word)
}, 2000)
})
}
// async+await是一起使用的
async function test(){//要前面加上async
const word1=await delay('孙悟空')//函数前加上await
console.log(word1)
const word2=await delay('猪八戒')
console.log(word2)
const word3=await delay('沙悟净')
console.log(word3)
}
test()//调用函数
koa-logger的代码:记录请求
module.exports = async(ctx,next)=>{
const start = new Date().getTime()
await next()
const end = new Date().getTime()
console.log(ctx.request.url,end-start,ctx.body.length)
}
koa-router的使用:
const koalogger = require('./koa-logger')
const Koa = require('koa')//只能以commonJS导入
const KoaRouter = require('koa-router')
const app = new Koa()
const Router = new KoaRouter()
app.use(Router.routes())
app.use(Router.allowedMethods())
Router.get('/',(ctx,next)=>{
ctx.body='wukunyuengCoder'
})
Router.get('/dashen',(ctx,next)=>{
ctx.body='大神Coder'
})
这两个中间件routes、allowedMethods的作用:
app.use(Router.routes()):
routes()中间件主要实现了四大功能。
1、将matched对象的path属性挂载在ctx.matched上,提供给后续的allowedMethods中间件使用。
2、将返回的dispatch函数设置router属性
3、插入一个新的路由前置处理中间件,将layer解析出来的params对象、路由别名以及捕获数组挂载在ctx上下文中
4、而对于路由匹配到众多layer,koa-router通过koa-compose进行处理
app.use(Router.allowedMethods()):
allowedMethods()中间件主要用于处理options请求
1、服务器不支持当前请求方法,返回501状态码;
2、当前请求方法为OPTIONS,返回200状态码;
3、path中的layer不支持该方法,返回405状态;
对于上述三种情况,服务器都会设置Allow响应头,返回该路由路径上支持的请求方法。
=======================================================================================
import path from ‘path’ //node自动提供的
import render from ‘koa-ejs’
ejs引擎模板:
render(app,{
root:path.join(__dirname,‘文件路径’),
layout:‘layout’,
viewExt:‘html’, //尾缀
cache:false,
debug:false
})
跳转路由index:
router.get(’/’,async ctx=>(
await ctx.render(‘index’,{
title:‘hello koa’
})
))
接收模板用<%- %>
接收值用<%= %>
接收ejs模板用<% %>
ejs语法特点:
当要遍历时需要把括号拆分,把循环得出的结果再另外包在中间:
<ul class="databaserender">
<% databases.forEach(databaseitem=>{ %>//forEach遍历语法
<li class="databaseitem">
<%= databaseitem.name%>
</li>
<% }) %>
</ul>
=======================================================================================
koa基础配置:
const Koa=require('koa')
const KoaRouter=require('koa-router')
//实例化koa
const app=new Koa()
const router=new KoaRouter()
//配置路由
app.use(router.routes()).use(router.allowedMethods())
//设置端口
const port=process.env.port||5000
//监听端口
app.listen(port,()=>{
console.log(`sever start on ${port}`)
})
//路由跳转
router.get('/',async ctx=>{
ctx.body={msg:'hello koa interface'}
})
package.json:
scripts修改两个参数:
"start": "node app.js",
"nodemon": "nodemon app.js"