跟我一块儿了解koa中间件
1、是 什么是 Koa 的中间件
通俗的讲: :中间件就是匹配路由以前或者匹配路由完成作的一系列的操做,咱们就能够
把它叫作中间件。
在 在express件 中间件( (Middleware )是一个函数,它能够访问请求对象(request object (req)),
响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一
般被命名为 next 的变量。在 Koa 中中间件和 express 有点相似。
中间件的功能包括:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。
若是个人 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹
配了。若是想往下匹配的话,那么须要写 next()
2、Koa 应用可以使用以下几种中间件:
应用级中间件
路由级中间件
错误处理中间件
第三方中间件
1.应用级中间件web
//app.js //在匹配路由以前,会打印出时间 //引入 koa模块 var Koa=require('koa'); var router = require('koa-router')(); /*引入是实例化路由** 推荐*/ var app=new Koa(); //Koa中间件 //匹配任何路由 ,若是不写next,这个路由被匹配到了就不会继续向下匹配 // 匹配路由以前打印日期 app.use(async(ctx,next)=>{ console.log(new Date()) await next() }) router.get('/',async(ctx)=>{ ctx.body = "首页" }) router.get('/news',async(ctx)=>{ ctx.body = "新闻列表页面" }) router.get('/login',async(ctx)=>{ ctx.body = "新闻登陆页面" }) app.use(router.routes())//启动路由 app.use(router.allowedMethods()); app.listen(3004);
路由级中间件express
//app1.js //引入 koa模块 var Koa=require('koa'); var router = require('koa-router')(); /*引入是实例化路由** 推荐*/ var app=new Koa(); //Koa中间件 //匹配任何路由 ,若是不写next,这个路由被匹配到了就不会继续向下匹配 router.get('/',async (ctx)=>{ ctx.body="首页"; }) // 匹配到news路由之后继续向下匹配路由 router.get('/news',async (ctx,next)=>{ console.log('这是一个新闻1'); await next(); }) router.get('/news',async (ctx)=>{ ctx.body='这是一个新闻'; }) router.get('/login',async (ctx)=>{ ctx.body="新闻列表页面"; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3002);
效果图
koa中的错误处理中间件app
//app2.js var Koa = require('koa') var router = require('koa-router')() var app = new Koa() app.use(async(ctx,next)=>{ console.log('这是一个中间件01') next() if(ctx.status == 404){ ctx.status = 404 ctx.body = '这是一个404页面' }else{ console.log(ctx.url) } }) router.get('/',async (ctx)=>{ ctx.body="首页"; }) router.get('/news',async (ctx)=>{ console.log('这是新闻2'); ctx.body='这是一个新闻'; }) router.get('/login',async (ctx)=>{ ctx.body="新闻列表页面"; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3003);
咱们看下效果,就知道这个错误处理中间件究竟是什么问题了
koa
4.koa中间件的执行流程async
//app3.js //引入 koa模块 var Koa=require('koa'); var router = require('koa-router')(); /*引入是实例化路由** 推荐*/ var app=new Koa(); //Koa中间件 //匹配任何路由 ,若是不写next,这个路由被匹配到了就不会继续向下匹配 //www.域名.com/news app.use(async (ctx,next)=>{ console.log('一、这是第一个中间件01'); await next(); console.log('五、匹配路由完成之后又会返回来执行中间件'); }) app.use(async (ctx,next)=>{ console.log('二、这是第二个中间件02'); await next(); console.log('四、匹配路由完成之后又会返回来执行中间件'); }) router.get('/',async (ctx)=>{ ctx.body="首页"; }) router.get('/news',async (ctx)=>{ console.log('三、匹配到了news这个路由'); ctx.body='这是一个新闻'; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3004);