原理:
- 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:'新聞頁面'}