KOA中间件
应用级中间件
const Koa = require('koa') //引入koa
const router = require('koa-router')()//引入koa-router 并且实例化他,注意引入的方式
const app = new Koa() //将koa实例化
//应用级中间件 匹配路由之前的操作 这样单独抽离出来可以进行全局通用,也可以单个路由通用,将单个路由参数后面加个next
app.use( async (ctx,next)=>{
//ctx.body = '这是一个中间件' 如果将这句话写上去,结果是不管哪个路由都显示这里面的页面
console.log(new Date()); //每次匹配之前都打印日期
await next() //当前路由匹配完成继续向下匹配
})
//单独写法
router.get('/admin', async (ctx,next)=> {
ctx.body = '个人信息'
await next() //只对当前路由有效
})
//配置中间件
router.get('/', async (ctx)=> {
ctx.body = '首页'
}).get('/index/:aid', async (ctx,next) => {
console.log(ctx.params);
ctx.body='新闻'
})
app.use(router.routes()).use(router.allowedMethods())//router.routes()启动路由 router.allowedMethods()可以配置可以不配置
// 监听端口
app.listen(4100, () => {
console.log('服务器启动成功');
})
路由级中间件
const Koa = require('koa') //引入koa
const router = require('koa-router')()//引入koa-router 并且实例化他,注意引入的方式
const app = new Koa() //将koa实例化
//配置中间件
router.get('/index', async (ctx,next) => {
ctx.body='这是第一个新闻新闻'
console.log(2);
// await next() //如果不要next 那么在相同路由下面的操作将不会在执行,如果加了next 那么结果是最后一个相同路由的内容
}).get('/index',async(ctx,next)=>{
ctx.body='这是重复s新闻'
console.log(3);
})
app.use(router.routes()).use(router.allowedMethods())//router.routes()启动路由 router.allowedMethods()可以配置可以不配置
// 监听端口
app.listen(4100, () => {
console.log('服务器启动成功');
})
路由级中间件
起到的作用就是是否组织当前路由继续向下执行
错误处理中间件
app.use(async (ctx, next) => {
console.log(new Date());
await next() //当前路由匹配完成继续向下匹配
if (ctx.status == 404) {
ctx.status = 404
ctx.body = '这是一个404页面'
}
})
koa的路由处理流程
app.use(async (ctx, next) => {
console.log(1);
await next() //当前路由匹配完成继续向下匹配
console.log(6);
})
app.use(async (ctx, next) => {
console.log(2);
await next() //当前路由匹配完成继续向下匹配
console.log(5);
})
app.use(async (ctx, next) => {
console.log(3);
await next() //当前路由匹配完成继续向下匹配
console.log(4);
})
koa路由处理流程就跟剥洋葱一样从外往内,在从内往外,next相当于起到一个阻塞的作用,错误处理体现的很明显 ,在匹配不到路由的时候他就会反过头来执行404页面,还比如在权限方面 在本地找不到密钥的时候的时候就会反过头跳到登录页面,应用场景自己想象