nodejs关于中间件解析

 更新时间:2022年12月03日 11:20:19   作者:石头山_S  
这篇文章主要介绍了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.发送请求

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

总结

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

相关文章

  • nodejs aes 加解密实例

    nodejs aes 加解密实例

    今天小编就为大家分享一篇nodejs aes 加解密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • nodejs中实现路由功能

    nodejs中实现路由功能

    这篇文章主要介绍了nodejs中实现路由功能,顾名思义,路由指的就是我们要针对不同的URL有不同的处理方式,本文将教你在node.js中实现路由功能,需要的朋友可以参考下
    2014-12-12
  • 基于豆瓣API+Angular开发的web App

    基于豆瓣API+Angular开发的web App

    这篇文章主要介绍了基于豆瓣API+Angular开发的web App的方法和示例代码,效果非常棒,有需要的小伙伴参考下
    2015-01-01
  • 前端node Session和JWT鉴权登录示例详解

    前端node Session和JWT鉴权登录示例详解

    关于前端鉴权登录是比较常见的需求了,本文将从服务端渲染和前后端分离的不同角度下演示鉴权,为大家介绍前端node Session和JWT鉴权登录示例详解
    2022-07-07
  • nodejs微信公众号支付开发

    nodejs微信公众号支付开发

    这篇文章主要为大家详细介绍了nodejs微信公众号支付开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • node.js将MongoDB数据同步到MySQL的步骤

    node.js将MongoDB数据同步到MySQL的步骤

    这篇文章主要给大家介绍了关于node.js将MongoDB数据同步到MySQL的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-12-12
  • Node.js实现修改文件字符集功能的具体过程

    Node.js实现修改文件字符集功能的具体过程

    在日常生活、工作中,我们经常会遇到需要处理不同编码格式的文件,有时,在尝试打开这些文件时会遇到乱码,原因通常是文件的编码与我们使用的文本编辑器或编程语言的默认编码不匹配,这篇文章将介绍Node.js修改文件字符集的实现思路和具体实现过程
    2024-08-08
  • 详解node.js平台下Express的session与cookie模块包的配置

    详解node.js平台下Express的session与cookie模块包的配置

    本篇文章主要介绍了详解node.js平台下Express的session与cookie模块包的配置,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • NodeJS测试框架mocha入门教程

    NodeJS测试框架mocha入门教程

    本文给大家简单介绍了NodeJS里最常用的测试框架--mocha的安装以及简单的使用方法,支持直接在browser上跑Javascript代码测试,这里推荐给大家
    2017-03-03
  • Node.js(v16.13.2版本)安装及环境配置的图文教程

    Node.js(v16.13.2版本)安装及环境配置的图文教程

    本文主要介绍了Node.js(v16.13.2版本)安装及环境配置的图文教程,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05

最新评论