Koa與Node.js開發實戰(2)——使用Koa中間件獲取響應時間(視頻演示)

學習架構:html

 

  在實戰項目中,常常須要記錄下服務器的響應時間,也就是從服務器接收到HTTP請求,到最終返回給客戶端之間所耗時長。在Koa應用中,利用中間件機制能夠很方便的實現這一功能。代碼以下所示:瀏覽器

01    const koa = require('koa');
02    const app = new koa();
03    app.use(async (ctx, next) => {                // 記錄服務器響應時間的中間件
04        let stime = new Date().getTime();         // 記錄當前時間戳
05        await next();                             // 事件控制權中轉
06        let etime = new Date().getTime();         // 全部中間件執行完成後記錄當前時間
07        ctx.response.type = 'text/html';
08        ctx.response.body = '<h1>Hello World</h1>';
09        console.log(`請求地址: ${ctx.path},響應時間:${etime - stime}ms`);
10    });
11    app.use(async (ctx, next) => {
12        console.log('中間件 doSoming');
13        await next();
14        console.log('中間件執行 over');
15    });
16    app.listen(3000, () => {
17        console.log('server is running at http://localhost:3000');
18    });

執行上述代碼,控制檯打印顯示:服務器

server is running at http://localhost:3000

而後打開瀏覽器,訪問http://localhost:3000,控制檯顯示內容更新以下:架構

中間件 doSoming

中間件執行 over

請求地址: /,響應時間:1ms

中間件 doSoming

中間件執行 over

請求地址: /favicon.ico,響應時間:0ms

  當服務器接收到HTTP請求後,會以「洋蔥模型」的方式開始流轉。先進入第一個中間件。在上述代碼中,第一個中間件記錄下當前時間戳,而後將控制權向下傳遞,第二個中間件進行相應的邏輯處理,第三個中間件進行相應的邏輯處理……,最後再一層層的返回,直到返回給第一個中間件,而後再次記錄下當前時間戳,記錄的兩次時間戳之間的差值,即爲這次HTTP請求的響應時間。app

  可能細心的讀者會發現,控制檯打印了兩條記錄,這是由於訪問http://localhost:3000後,DOM結構在瀏覽器上進行渲染,會發起相應的靜態資源文件的HTTP請求,「/favicon.ico」即爲DOM渲染時默認自帶的靜態資源。koa

  另外,讀者能夠思考一下,若是一箇中間件沒有調用await next(),又會發生什麼狀況呢?答案是「後面的中間件將不會執行」。讀者能夠自行驗證一下。async

本節在線視頻地址https://camp.qianduan.group/koa2/2/1/2,二維碼:學習

 

一塊兒跟我來學習《Koa與Node.js開發實戰》這本書吧。ui

相關文章
相關標籤/搜索