1. 程式人生 > >Koa與Node.js開發實戰(2)——使用Koa中介軟體獲取響應時間(視訊演示)

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

學習架構:

 

  在實戰專案中,經常需要記錄下伺服器的響應時間,也就是從伺服器接收到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請求的響應時間。

  可能細心的讀者會發現,控制檯列印了兩條記錄,這是因為訪問http://localhost:3000後,DOM結構在瀏覽器上進行渲染,會發起相應的靜態資原始檔的HTTP請求,“/favicon.ico”即為DOM渲染時預設自帶的靜態資源。

  另外,讀者可以思考一下,如果一箇中間件沒有呼叫await next(),又會發生什麼情況呢?答案是“後面的中介軟體將不會執行”。讀者可以自行驗證一下。

本節線上視訊地址https://camp.qianduan.group/koa2/2/1/2,二維碼:

 

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