前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs 中间件实现原理浅析

nodejs 中间件实现原理浅析

作者头像
吴文周
发布2022-03-09 21:36:11
8990
发布2022-03-09 21:36:11
举报
文章被收录于专栏:吴文周的专栏吴文周的专栏

概念

中间件是处在HTTP的Request和Response中间,用来实现某种中间功能的函数。例如IP筛选,查询字符串传递,请求体解析,cookie信息处理,权限校验,日志记录,会话管理中间件(session),gzip压缩中间件(如compress),错误处理,这样与业务本身关联不强,却又需要公共抽象的模块。

从头开始构建一个中间件

开发准备

热更新

使用nodemon监听文件的变化热更新提升开发体验。稍微设置一下延迟时间,减少无效保存操作影响。

debug

基于vscode 调试工具进行开发提效

debug.png
debug.png

正式开发

构建一个nodejs的http服务

常见的express和koa都是采用类似的方式实例化的可以查看下面的代码示例,不仅仅是应该开源团队成员的原因,实际上本身http模块就是使用这样的形式去创建服务的。

构建路由

路由的实际本身其实就是一个map映射表,对应的路径匹配可以执行的函数。实现起来还是比较简单。

中间件

概念

中间件可以说是面向切片的最佳实践了,这种在运行时动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程,在不改变原有业务行为的前提下,扩展了本身的场景,再不改变原来的代码的前提下完成我们的开发诉求。具体场景可以是一个日志中间件,支持跨域中间件。

洋葱模型
io.jpeg
io.jpeg

从模型我们也可以看出两个特点

  • 第一每一个中间件都可以对请求响应进行修改,并且往下传递。
  • 第二控制权不断的发生着转义,由外而内,再由内而外。

从模型本身来看我们需要一个有序数组,我们还需要控制流程。实现原理还是用了一个简单的递归去控制流程,加上next函数的执行,实现了请求由外入内,再又内到外。

todo

这仅仅是一个最简单的实现,帮助大家了解一下一个node服务的创建,路由的实现,中间件中控制,核心的很多场景都是没有实现的例如异步的支持,安全的校验,执行的去重,异常的处理等等。正在开发中大家还是要细化场景,完善整个逻辑。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 从头开始构建一个中间件
    • 开发准备
      • 热更新
      • debug
    • 正式开发
      • 构建一个nodejs的http服务
      • 构建路由
      • 中间件
    • todo
    相关产品与服务
    消息队列 TDMQ
    消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档