KOA中间件

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页面,还比如在权限方面 在本地找不到密钥的时候的时候就会反过头跳到登录页面,应用场景自己想象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜鸟学代码··

给打赏的我会单独一对一讲解

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值