学习架构:

在实战项目中,经常需要记录下服务器的响应时间,也就是从服务器接收到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开发实战》这本书吧。

Koa与Node.js开发实战(2)——使用Koa中间件获取响应时间(视频演示)的更多相关文章

  1. Koa与Node.js开发实战(3)——Nunjucks模板在Koa中的应用(视频演示)

    技术架构: ​ 在Koa中应用Nunjucks,需要先把Nunjucks集成为符合Koa规格的中间件(Middleware),从本质上来讲,集成后的中间件的作用是给上下文对象绑定一个render(vi ...

  2. Koa与Node.js开发实战(1)——Koa安装搭建(视频演示)

    学习架构: 由于Koa2已经支持ES6及更高版本,包括支持async方法,所以请读者保证Node.js版本在7.6.0以上.如果需要在低于7.6的版本中应用Koa的async方法,建议使用Babel ...

  3. iKcamp新书上市《Koa与Node.js开发实战》

    内容摘要 Node.js 10已经进入LTS时代!其应用场景已经从脚手架.辅助前端开发(如SSR.PWA等)扩展到API中间层.代理层及专业的后端开发.Node.js在企业Web开发领域也日渐成熟,无 ...

  4. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  5. 基于 Koa平台Node.js开发的KoaHub.js的控制器,模型,帮助方法自动加载

    koahub-loader koahub-loader是基于 Koa平台Node.js开发的KoaHub.js的koahub-loader控制器,模型,帮助方法自动加载 koahub loader I ...

  6. 腾讯高级工程师带你完整体验Node.js开发实战

    Node.js拥有广大的 JavaScript程序员基础并且完全开源,它被广泛地用在 Web服务.开发工作流.客户端应用等诸多领域.在 Web 服务开发这个领域,业界对 Node.js 的接受程度最高 ...

  7. 基于 Koa平台Node.js开发的KoaHub.js连接打印机的代码

    最近好多小伙伴都在做微信商城的项目,那就给大家分享一个基于 Koa.js 平台的 Node.js web 开发的框架连接微信易联云打印机接口的代码,供大家学习.koahub-yilianyun 微信易 ...

  8. 基于 Koa平台Node.js开发的KoaHub.js获取/设置会话功能代码

    koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...

  9. 基于 Koa平台Node.js开发的KoaHub.js的静态服务器重写和索引代码

    koa-static-server Static file serving middleware for koa with directory, rewrite and index support k ...

随机推荐

  1. android – 无法解析AppCompatActivity

    用SVN获取了别人写的代码后出现 android – 无法解析AppCompatActivity 最后解决办法: 在模版的build.gradle文件中将依赖性的版本号更改了 ,同步后,再改过来就ok ...

  2. mysql字段约束

    为了确保数据的完整性和唯⼀性,关系型数 据库通过约束机制来实现目. 一. unique 唯一性约束    : 值不可重复: 二. not null    非空约束    : 值不可为空: 三. def ...

  3. 如何学好java

    今天发现这么一篇文章,对于笔者谈的:"一方面很努力学习,一方面又觉得不踏实",我感同身受.觉得文章写得不错,在此献给一些在java中努力的朋友们,希望能有所收获. 文章原内容: 近 ...

  4. 删除Widows 启动项中的信息

    1.打开任务管理器切换到启动Tab,在需要删除的项目上点击右键,点击打开文件所在位置,这样就找到了启动项所在磁盘位置,可以根据需要决定是否删除. 2.从注册表中删除在启动中的注册信息. regedit ...

  5. Surging微服务的注意事项

    做个记录 1.Service的方法必须是异步方法 这个是同事发现的,非异步方法Swagger会用不了 2.仓储层不能用接口 这个是自己做的,根据同事的例子,本来好好的,想着在仓储层给加个接口,然后用接 ...

  6. cmd黑客入侵命令大全

    nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写 tracert -参数 ip(或计算机名) 跟踪路由(数据包 ...

  7. 解决 WordPress“正在执行例行维护,请一分钟后回来”

    WordPress在升级程序.主题.插件时,都会先切换到维护模式,也就是显示 “正在执行例行维护,请一分钟后回来(Briefly unavailable for scheduled maintenan ...

  8. Jsp的基本知识

    jsp页面的基本组成部分:指令,表达式,小脚本,声明,注释,静态内容. 指令元素有三种: 1.page:eg <%@ page 属性名="属性值" 属性名="属性值 ...

  9. 工作中遇到的一些linux常用命令总结

    零.查看历史命令,linux中可按“↑” “↓”查找之前输入的命令,亦可用 history 命令查看之前的输入,linux中的亦有“Tab”键可联想输入 一.root权限: 1.su 之后输入root ...

  10. nginx学习路线

    nginx:熟透,配置.rewrite.黑白名单.脚本.代理.优化等