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)