iis服务器助手广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >nodejs关于中间件解析
  • 854
分享到

nodejs关于中间件解析

nodejs 中间件nodejs关于中间件中间件解析 2022-12-03 22:12:21 854人浏览 泡泡鱼
摘要

目录nodejs 中间件中间件的编写中间件的使用nodejs制作自定义中间件总结nodejs 中间件 今天我们来了解一下 nodejs 中间件,中间件可以说是 node 中最重要也是

nodejs 中间件

今天我们来了解一下 nodejs 中间件,中间件可以说是 node 中最重要也是最核心的地方。它最重要的思想便是 洋葱模型 ,从外到内依次执行中间件。

说了半天中间件到底有什么作用呢,在处理服务请求时,我们要进行很多细节的处理,比如解析请求体,报文报头,设置 cookie 等等很多操作,如果每次访问路由都要编写这些繁琐的代码,将会造成代码混乱,你可能连自己的业务逻辑代码都找不到了。

但是有了中间件的存在,我们将那些固定功能的代码封装起来,在每次访问路由后自动去执行我们用到的所有中间件,我们只需要把注意力放在编写我们的业务逻辑代码便可。

由于大量中间件的支持,使用 node 开发变得十分便捷,高效,比如express , egg 这些成熟的框架

中间件的编写

说了这么半天我们如何写一个中间件呢,前后端交互最重要的就是两个参数 request 和 respond ,其次,每一个中间件执行完毕应该进入下一个中间件,因此还需要一个 next 参数,用来启动下一个中间件。

let bodyParse = function(req, res, next){
    // 中间代码不作解释
    console.log(' 解析请求体');
    next()
}

中间件的使用

分析:我们将中间件保存在 stack 中,我们通过 use 函数来注册路由,同时为该路由注册中间件,在 handleEvent 函数中启动中间件,并执行我们的逻辑事件函数。便形成了一个简单的执行流程,首先通过路由匹配到我们事先分配好的事件函数,然后执行其中我们注册好的中间件,最后执行我们的事件逻辑函数,从请求到响应便执行完毕。

但是这样有一个弊端,每一次路由都需要遍历一次我们注册的中间件,造成了不必要的浪费,这些相同的中间件只需要执行一次便可。因此我们的代码还需要改进。

nodejs制作自定义中间件

对于Nodejs的中间件我想各位小伙伴都有所了解,下边我就以制作一个自定义的处理表单数据的中间件为例,告诉大家如何自作一个属于自己的自定义中间件。

1.创建一个util.js文件,用于封装编写自定义的表单数据处理中间件

// 导入querystring模块(目的是用于将下方拼接好的查询字符串转换成对象)
const qs = require('querystring')
 
//创建中间件处理函数
function bodyParser(req, res, next) {
  let str = ''
  // 这个chunk就是每次获取到的请求体的部分数据
  req.on('data', (chunk) => {
    str += chunk
  })
 
  req.on('end', () => {
    const body = qs.parse(str)
    //这里将处理好的请求体数据挂载到req上
    // 就是为了让后边的路由可以通过req.body获取到
    req.body = body
    next() //将流转关系传递给后边的中间件或路由
  })
}
 
//导出中间件函数
module.exports = bodyParser

2.创建一个app.js文件,用于创建服务,注册中间件

// 导入express模块
const express = require('express')
 
// 创建服务器对象
const app = express()
 
// 1.导入自定义的中间件模块
const bodyparser = require('./util.js')
 
// 2.注册自定义的中间件  将其注册为全局可用的中间件
 
app.use(bodyparser)
 
app.post('/test', (req, res) => {
  //由于全局注册过自定义的处理请求体表单数据的中间件,所以这里可以直接获取到请求体数据
  // 如果过没有注册过处理表单数据的中间件,这里req.body的返回值将会是undefined
  res.send(req.body)
})
 
//启动服务器
app.listen(80, () => {
  console.log('express server running at Http://127.0.0.1');
})

3.效果测试

在集成终端中使用运行app.js文件,启动服务

打开postman

  • 1.选择post请求方式,在地址栏输入http://127.0.0.1/test。
  • 2.选择Body选项。
  • 3.选择x-www-fORM-urlendcoded
  • 4.填写请求体表单数据
  • 5.发送请求

由下图可见,在请求发送后,服务器端返回的就是请求体对象,说明自定义中间件生效

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: nodejs关于中间件解析

本文链接: https://www.lsjlt.com/news/174014.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nodejs关于中间件解析
    目录nodejs 中间件中间件的编写中间件的使用nodejs制作自定义中间件总结nodejs 中间件 今天我们来了解一下 nodejs 中间件,中间件可以说是 node 中最重要也是...
    99+
    2022-12-03
    nodejs 中间件 nodejs关于中间件 中间件解析
  • nodejs中间件使用实例分析
    这篇文章主要介绍了nodejs中间件使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs中间件使用实例分析文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • NodeJs Express中间件超详细讲解
    目录什么是中间件现实生活中的例子Express 中间件的调用流程Express 中间件的格式next 函数的作用定义中间件函数全局生效的中间件定义全局中间件的简化形式中间件的作用定义...
    99+
    2024-04-02
  • nodejs express实现中间件
    目录先看应用实现思路具体实现订阅监听时做下对“不传匹配路径”等情况的处理请求发布时根据“是否具有路由表route属性”进行判断从而对中...
    99+
    2022-11-13
    nodejs express中间件 nodejs express
  • 关于mysql时间区间问题浅析
    目录一、between……and……二、<和>问题三、在java代码中拼接四、转变格式查询附:My...
    99+
    2024-04-02
  • 将nodeJs Date.toString()输出解析为go中的时间
    php小编草莓将为您介绍如何将nodeJs的Date.toString()输出解析为go中的时间。在开发过程中,经常会遇到不同编程语言之间的数据格式转换问题,特别是在处理日期和时间时更...
    99+
    2024-02-08
    字符串解析
  • nodejs中关于mysql数据库的操作
    目录基本概念为什么要有数据库什么是数据库数据库的分类数据库中基本术语数据库的可视化操作(创建数据库、创建表)数据类型(部分)数据库的常见命令数据库相关表相关插入数据修改数据删除数据查...
    99+
    2022-11-13
    nodejs数据库操作 mysql数据库操作 nodejs mysql数据库
  • nodejs中Express中间件如何使用
    本篇文章给大家分享的是有关nodejs中Express中间件如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Express是一个基于No...
    99+
    2024-04-02
  • Lombok中关于@Data的使用解析
    目录Lombok@Data注解 内部实现 问题总结 解决方法 Lombok的@Data踩坑记录证明小结一下当你在使用 Lombok 的 @Data 注解时,其实会有一些坑需要关注,今...
    99+
    2024-04-02
  • 关于maven全局配置文件settings.xml解析
    目录settings.xml有什么用?settings.xml文件位置配置优先级settings.xml元素详解顶级元素概览LocalRepositoryInteractiveMod...
    99+
    2024-04-02
  • 深入解析Nodejs中的大文件读写
    目录前言一、node中的文件读写1.1 常规文件读写1.2 Stream文件读写二、node文件读写RAM和Blob大小的限制2.1 基础问题2.2 分片读取三、其他3.1 扩展浏览...
    99+
    2024-04-02
  • 关于JDBC与MySQL临时表空间的深入解析
    背景 临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,相信大家在开发中经常会遇到相关的需求,下面本文将给大家详细JDBC与MySQL临时表空间的相关内容,分享出来供大家参考学习...
    99+
    2024-04-02
  • 详解Java关于JDK中时间日期的API
    JDK 8 之前日期和时间的API测试 //1.System类中的currentTimeMillis() public void test1(){ lo...
    99+
    2024-04-02
  • Nodejs之Express中间件的分类介绍
    目录中间件的分类分别是1 应用级别的中间件2 路由级别的中间件3 错误级别的中间件4 Express内置的中间件5 第三方中间件总结中间件的分类 为了方便大家理解和记忆中间件的使用,...
    99+
    2022-12-03
    Nodejs Express中间件 Nodejs中间件 Express中间件分类
  • nodejs中间件Koa和Express有什区别
    这篇文章将为大家详细讲解有关nodejs中间件Koa和Express有什区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Koa用起来非常方便——比之express,它“完美中间件”的设计让功能之间看起来...
    99+
    2023-06-06
  • nodejs中的读取文件fs与文件路径path解析
    目录什么是nodejs?global模块-全局变量fs模块读取文件写文件追加文件文件同步与异步的说明path模块路径操作的问题path模块的常用方法什么是nodejs? Node.j...
    99+
    2022-11-13
    nodejs中fs path 读取文件fs 文件路径path
  • nodejs里的koa-static中间件是什么
    这篇文章主要介绍“nodejs里的koa-static中间件是什么”,在日常操作中,相信很多人在nodejs里的koa-static中间件是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs里的k...
    99+
    2023-06-07
  • 关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析
    目录分析AbstractAutoProxyCreator类分析AbstractAdvisorAutoProxyCreator类分析AspectJAwareAdvisorAutoPro...
    99+
    2023-05-19
    Spring AutoProxy Spring AnnotationAwareAspectJAutoProxyCreator类
  • 关于MySQL的时间进位问题浅析
    MySQL 当中默认的时间类型(datetime 和 timestamp)的精度是秒,如果设置进去的时间值精度小于秒的话,就会被四舍五入,可能导致数据库中的值比原始值多了一秒。也就是说,本来属于今天的记录可...
    99+
    2024-04-02
  • 关于Java中String类字符串的解析
    目录一、前言二、String类概述三、字符串的特点四、String 构造方法五、String类对象的特点六、比较字符串的方法七、判断两个字符串地址是否相等一、前言 在java中,和C...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作