1、应用级中间件

var Koa = require('koa')
var router = require('koa-router')()
var app = new Koa()

//Koa中间件
//两个参数则第一个表示匹配对应的路由,第二个参数为async;只有一个参数表示匹配所有路由。
app.use(async (ctx)=>{
    ctx.body = '这是一个中间件'
})
app.use(async (ctx, next)=>{
    console.log(new Date())
    await next()     //当前路由匹配完成后继续向下匹配
    //匹配任何路由,如果不写next,这个路由被匹配到了就不会继续向下匹配
})


app
    .use(router.routes())  //启动路由
    .use(router.allowedMethods()) 

app.listen(3000)

2、路由级中间件

var Koa = require('koa')
var router = require('koa-router')()
var app = new Koa()


router.get('/', async (ctx)=>{
    ctx.body = '首页'
})
// router.get('/news', async (ctx)=>{
//     console.log('这是一个新闻')   //匹配到一个路由若没有响应则会出错
// })
router.get('/news', async (ctx, next)=>{
    console.log('这是一个新闻')
    await next()
})
router.get('/news', async (ctx)=>{
    ctx.body = '新闻页面'
})


app
    .use(router.routes())  //启动路由
    .use(router.allowedMethods()) 

app.listen(3000)

3、错误处理级中间件

var Koa = require('koa')
var router = require('koa-router')()
var app = new Koa()


router.get('/', async (ctx)=>{
    ctx.body = '首页'
})

router.get('/news', async (ctx, next)=>{
    console.log('这是一个新闻')
    await next()
})
router.get('/news', async (ctx)=>{
    ctx.body = '新闻页面'
})

//无论放在哪儿,都先执行这个,然后再执行next匹配下一个路由
//www.域名.com/xxx匹配不到,则返回到此执行if语句
//无论如何都会最后都会返回执行if
//洋葱模型
app.use(async (ctx, next)=>{  
    console.log('这是一个中间件01')  
    next()
    
    if(ctx.status == 404){
        ctx.status = 404
        ctx.body = '这是一个404页面'
    }
})


app
    .use(router.routes())  //启动路由
    .use(router.allowedMethods()) 

app.listen(3000)

 

posted on 2021-06-21 22:28  李起桉  阅读(124)  评论(0编辑  收藏  举报