koa中間件

1.logger
koa一個重要設計就是中間件停撞,首先先看logger打印日志的功能县踢。

console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`)
也可以拆分獨立函數(shù)
const logger=(ctx,next)=>{
  console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
  next();
}

中間件就是在request和response請求之間實現(xiàn)中間功能转绷。
app.use來加載中間件,其中中間件默認接收兩個參數(shù),第一個是context對象硼啤,第二個是next函數(shù)议经,調用next函數(shù),就可以把執(zhí)行權轉交給下一個中間件谴返。
2.中間件棧
多個中間件形成棧結構煞肾,先進后出。

1.最外層的中間件首先執(zhí)行嗓袱。
2.調用next函數(shù)把執(zhí)行權交給下一個中間件籍救。
3.最內層的中間件最后執(zhí)行
4.執(zhí)行結束執(zhí)行權交給上一層中間件
5.最外層中間件收回執(zhí)行權后,執(zhí)行next函數(shù)之后的代碼渠抹。

const one = (ctx, next) => {
  console.log('>> one');
  next();
  console.log('<< one');
}

const two = (ctx, next) => {
  console.log('>> two');
  next(); 
  console.log('<< two');
}

const three = (ctx, next) => {
  console.log('>> three');
  next();
  console.log('<< three');
}

app.use(one);
app.use(two);
app.use(three);
輸出:
>> one
>> two
>> three
<< three
<< two
<< one
即先執(zhí)行最外層one钧忽,執(zhí)行到最內層,再執(zhí)行最能層代碼逼肯,最后最外層one收回執(zhí)行權耸黑。
如果把two的next注釋:
>> one
>> two
<< two
<< one
執(zhí)行到two沒有next因此不再執(zhí)行。

3.異步中間件
異步中間件必須攜程async函數(shù)形式篮幢。

const fs = require('fs.promised');
const Koa = require('koa');
const app = new Koa();

const main = async function (ctx, next) {
  ctx.response.type = 'html';
  ctx.response.body = await fs.readFile('./demos/template.html', 'utf8');
};

app.use(main);
app.listen(3000);

中間件必須攜程async函數(shù)大刊,fs.readFile是異步操作必須攜程await

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市三椿,隨后出現(xiàn)的幾起案子缺菌,更是在濱河造成了極大的恐慌,老刑警劉巖搜锰,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伴郁,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛋叼,警方通過查閱死者的電腦和手機焊傅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門剂陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來解寝,“玉大人扛禽,你說我怎么就攤上這事∮行颍” “怎么了握巢?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵晕鹊,是天一觀的道長。 經常有香客問我暴浦,道長溅话,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任歌焦,我火速辦了婚禮飞几,結果婚禮上,老公的妹妹穿的比我還像新娘同规。我一直安慰自己循狰,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布券勺。 她就那樣靜靜地躺著绪钥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪关炼。 梳的紋絲不亂的頭發(fā)上程腹,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音儒拂,去河邊找鬼寸潦。 笑死,一個胖子當著我的面吹牛社痛,可吹牛的內容都是我干的见转。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蒜哀,長吁一口氣:“原來是場噩夢啊……” “哼斩箫!你這毒婦竟也來了?” 一聲冷哼從身側響起撵儿,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤乘客,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淀歇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體易核,經...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年浪默,在試婚紗的時候發(fā)現(xiàn)自己被綠了牡直。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀匕。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖井氢,靈堂內的尸體忽然破棺而出弦追,到底是詐尸還是另有隱情岳链,我是刑警寧澤花竞,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站掸哑,受9級特大地震影響约急,放射性物質發(fā)生泄漏。R本人自食惡果不足惜苗分,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一厌蔽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摔癣,春花似錦奴饮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琢岩,卻和暖如春投剥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背担孔。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工江锨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糕篇。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓啄育,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拌消。 傳聞我的和親對象是個殘疾皇子挑豌,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內容