原理:
- koa 实例化对象的use方法中的回调函数,如下面实例中的App.use((ctx,next)=>{}),有ctx,next两个参数。
- 可以ctx的request,response对象,可以终结相应,只有调用 next() 才会调用下一个中间件,如果没有调用,next方法, 则不能继续下一个中间件
应用:
- 应用中间件
在请求刚进入服务时,必须执行的函数,可以通过中间件实现
/**
* 应用级别中间件
* */
const Koa = require('koa');
const Router = require('koa-router')();
const App = new Koa();
App.use((ctx,next)=>{
ctx.body = {};
ctx.body.date = new Date();
next()
});
Router.get('/',function (ctx,next) {
ctx.body.content='hello world'
})
Router.get('/news',function (ctx,next) {
ctx.body.content = "新闻页面"
})
App.use(Router.routes());
App.use(Router.allowedMethods());
App.listen(3000,()=>{
console.log('queck start at port 3000')
})
- 路由中间件
在某个请求前进行一些操作
/**
* 应用级别中间件
* */
const Koa = require('koa');
const Router = require('koa-router')();
const App = new Koa();
Router.get('/',function (ctx,next) {
ctx.body ={};
console.log('请求了/');
next();
})
Router.get('/news',function (ctx,next) {
ctx.body ={};
console.log('请求了/news');
next();
})
Router.get('/',function (ctx,next) {
ctx.body.content='hello world'
})
Router.get('/news',function (ctx,next) {
ctx.body.content = "新闻页面"
})
App.use(Router.routes());
App.use(Router.allowedMethods());
App.listen(3000,()=>{
console.log('queck start at port 3000')
})
访问 http://localhost:3000 '请求了/' {content:'hello world'}
访问 http://localhost:3000/news '请求了/news' {content:'新闻页面'}