koa 中間件概念及應用

原理:

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章