nodejs关于中间件解析

目录
  • nodejs 中间件
    • 中间件的编写
    • 中间件的使用
  • nodejs制作自定义中间件
  • 总结

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.发送请求

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

总结

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

(0)

相关推荐

  • NodeJs Express中间件超详细讲解

    目录 什么是中间件 现实生活中的例子 Express 中间件的调用流程 Express 中间件的格式 next 函数的作用 定义中间件函数 全局生效的中间件 定义全局中间件的简化形式 中间件的作用 定义多个全局中间件 局部生效的中间件 定义多个局部中间件 了解中间件的5个使用注意事项 中间件的分类 应用级别的中间件 路由级别的中间件 错误级别的中间件 Express内置的中间件 第三方的中间件 自定义中间件 1. 需求描述与实现步骤 2. 定义中间件 3 .监听req的data事件 4. 监听r

  • Nodejs之Express中间件的分类介绍

    目录 中间件的分类 分别是 1 应用级别的中间件 2 路由级别的中间件 3 错误级别的中间件 4 Express内置的中间件 5 第三方中间件 总结 中间件的分类 为了方便大家理解和记忆中间件的使用,Express官方把常见的中间件用法,分成了5大类 分别是 应用级别的中间件 路由级别的中间件 错误级别的中间件 Express内置的中间件 第三方的中间件 1 应用级别的中间件 通过app.use()或app.get()或app.post(),绑定到app实例上的中间件,叫做应用级别的中间件,代码

  • nodeJs编写错误处理中间件问题

    目录 nodeJs编写错误处理中间件 Connect中间件之错误处理中间件 范例 多个错误处理中间件组件 nodeJs编写错误处理中间件 app.use(async(ctx, next) => { try { await next(); } catch (err) { console.log(err, "错误机制"); ctx.status = err.status || err.statusCode; ctx.body = { message: err.message }; }

  • Nodejs中Express 常用中间件 body-parser 实现解析

    写在前面 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析.使用非常简单,以下两行代码已经覆盖了大部分的使用场景. app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); 本文从简单的例子出发,探究body-parser的内部实现.至于body-parser如何使用,感兴趣的同学可以参考官方文档. 入门基础 在正式讲解前,我们先来看一个POST

  • nodejs关于中间件解析

    目录 nodejs 中间件 中间件的编写 中间件的使用 nodejs制作自定义中间件 总结 nodejs 中间件 今天我们来了解一下 nodejs 中间件,中间件可以说是 node 中最重要也是最核心的地方.它最重要的思想便是 洋葱模型 ,从外到内依次执行中间件. 说了半天中间件到底有什么作用呢,在处理服务请求时,我们要进行很多细节的处理,比如解析请求体,报文报头,设置 cookie 等等很多操作,如果每次访问路由都要编写这些繁琐的代码,将会造成代码混乱,你可能连自己的业务逻辑代码都找不到了.

  • NodeJs Express中间件使用流程解析

    目录 1.调用流程 2.格式 3.next函数的作用 4.定义中间件函数 5.全局生效的中间件 6.中间件的作用 7.定义多个全局中间件 8.局部生效的中间件 9.定义多个局部中间件 10.了解中间件的注意事项 11.中间件的分类 1.应用级别的中间件 2.路由级别的中间件 3.错误级别的中间件 4.Express内置的中间件 5.第三方中间件 6.自定义中间件 中间件(Middleware),特指业务流程的中间处理环节 1.调用流程 当一个请求到达Express的服务器之后,可以连续调用多个中

  • 实例分析nodejs模块xml2js解析xml过程中遇到的坑

    本文实例讲述了nodejs模块xml2js解析xml过程中遇到的坑.分享给大家供大家参考,具体如下: 在一个项目中,用到nodejs模块xml2js解析xml,xml的数据如下: <xml> <MsgId>6197906553041859764</MsgId> </xml> 用xml2js中的xml2js.parseString 方法解析,本来以为是一个json,但总是解析失败,把解析的结果log下后如下: { xml: { MsgId: [ '619790

  • 前端需知nodejs express中间件使用及定义详解

    目录 引言 中间件的定义 中间件的使用 总结 引言 在上一节中我们简单了解了express的路由,本文主要分析下express的另一个核心功能中间件的使用.路由是express整个框架能有如今广泛使用和发展的基础,那中间件就是其发展的养分.正是express丰富的中间件才节省了我们大量的开发时间. 中间件的定义 对于express来说,中间件其实就是一个规定了入参和出参的JavaScript函数,这个函数可以处理请求request和返回response相关的参数,其功能如下: 执行任何代码. 处

  • 详解NodeJS框架express的路径映射(路由)功能及控制

    我 们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route control章节,route实现了客户端请求的URL的路径映射功能,暂且译为路由或URL映射吧.如果你还是不太理解,相信看完本篇文章将会有些收 获的. 路由(URL映射) Express利用HTTP动作提供了有意义并富有表现力的URL映射API,例如我们可能想让用户帐号的URL看起来像"/user/12"的样子,下面的例子就能实现这样的路由,其中与

  • node.js中express中间件body-parser的介绍与用法详解

    前言 Node中的核心模块分两类:一类是自带的核心模块,如http.tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求.express在3.0版本中自带有很多中间件,但是在express 4.0以后,就将除static(静态文件处理)以外的其他中间件分离出来了:在4.0以后需要使用中间件时,就需要单独安装好相应的中间件以后调用,以下3.0与4.0中间件的中间件区别(3.0是内置中间件属性名,4.0是需要安装的中间件名称): Express 3

  • 利用nodeJS+vue图片上传实现更新头像的过程

    目录 思路: 1.前端准备 2.node后端服务 总结 思路: 前端通过el-upload将图片传给后端服务,后端通过formidable中间件解析图片,生成图片到静态资源文件夹下(方便前端直接访问),并将图片路径返回给前端,前端拿到图片路径即可渲染头像. 1.前端准备 前端采用vue的el-upload组件,具体用法见官方API.使用代码如下 <!--头像上传--> <el-upload class="avatar-uploader" action="ht

  • nodejs基础知识

    什么是nodejs? node.js是基于Chrome javaScript运行时建立的平台,用于方便地搭建响应速度快.易于扩展的网络应用.(但nodejs不是javascript应用,nodejs采用c++语言编写   ) js是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.对于需要独立运行的JS,nodejs就是一个解析器. 每一种解析器都是一个运行环境,可以干以下事情:   1.允许JS定义各种数据结构,进行运算:   2.允许JS使用

  • Nodejs使用Mongodb存储与提供后端CRD服务详解

    前言 众所周知JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs.htt

随机推荐