广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >express.js框架中间件的示例分析
  • 206
分享到

express.js框架中间件的示例分析

2024-04-02 19:04:59 206人浏览 安东尼
摘要

这篇文章给大家分享的是有关express.js框架中间件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。_express.js_作为_node.js_的老牌框架,是现有框

这篇文章给大家分享的是有关express.js框架中间件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

_express.js_作为_node.js_的老牌框架,是现有框架中最全面的。然而在学习express除了那些api之外,对于框架最重要的就是__中间件__这个概念了。如果理解了,就可以把这个框架玩活了,项目开发肯定会更加顺利,而且还可以开发很多额外的功能,甚至中间件扩展开发。

但是就这么一个东西,是很多学习node.js的小萌新们就算写出一个博客项目,都不知道它到底有啥作用。我当时在理解的时候也花了不少功夫,趁着没有啥工作,给各位学习express.js的一点点我的指导意见。当然,这里面可能也有koa2和egg的忠实粉丝,但其实所有node框架貌似都有这个概念,所以我用express举例子,希望各位将就一下哈,应该都是可以看得懂的。

首先我先来一波官方的解释:

express.js框架中间件的示例分析

好吧,被这些英语吓到了,来一波译文:

[中间件函数是可以访问请求对象(req)、响应对象(res)和应用程序请求响应周期中的下一个函数的函数。下一个函数是Express路由器中的一个函数,当调用该函数时,它执行当前中间件之后的中间件。

中间件功能可以执行以下任务:

  • 执行任何代码

  • 对请求和响应对象进行更改。

  • 结束请求响应周期。

  • 调用堆栈中的下一个中间件。

终于知道当初的我为毛刚开始理解的时候很困难了,说实在的看得我真的有懵的。幸好,我还是从这个坑爬出来了,我来拉你们一把了。首先我们不去深究概念,直接上一个代码块。

express.js框架中间件的示例分析

如果我们启动服务,访问'/'路由,会返回"这是一个根路由",访问router1路由就会得到这是一个"这是一个router1路由的"的信息。这看起来是一个很简单的路由查询,我们理一下过程,这个请求是如何访问到这个路由的呢。

一般来说,一个express框架的项目会写入很多路由,但各位要注意的是,这个请求并不是直接定位到这个路由的,而是一个从上至下匹配的一个过程。

有点乱?没关系我们看图

express.js框架中间件的示例分析

我们看到这幅图,有一个箭头,从上到下的。什么意思呢,如果用户发了一个这样的请求

GET '/router7'

那么他会从第一个开始一个一个去匹配,知道发现有一个路由名和请求方法都一致的路由,就立马执行里面的代码,并且返回一段文字"这是一个router7路由"。这都很好理解,那么现在我有一个需求,就是不管访问任何一个路由,我都要知道这个访问者的ip地址和访问的目标路由打印出来,生产访问日志。那么怎么做了。

我们分析一波,这段程序是所有的请求都要执行的,如果按照执行顺序的说法,那么这段程序是应该放到所有路由的最前面的,也就是说这段程序是所有路由要经过的一段程序,也就是我们所说的中间件。好的,废话不多说,上代码

const fs = require('fs')
const log = (req,res) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
}

比如现在我有一个log函数,它专门用来记录访问日志的。如何所有的都一起执行了,我们加一段这样的代码

app.use(log)

它加在所有代码的最上面,但是不是加上就完事了,还必须在log函数里面再加一段代码,不然当程序执行到里面之后就出不去了,什么代码了。我们重写log函数

const log = (req,res,next) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
   next()
}

大家有没有看见那个next,它有什么作用了。前面我们提到,它其实就是一个过渡者,主要的作用其实就是经过之后,要继续往下面执行,还是就此终止返回结果。

说的简单一点,就是我们一个Http请求,到达我们的node服务器之后,要经历的过程,而每经过一个程序块,就是个中间件,每一个中间件只要有next就会传递到下一个中间件里面,直到服务器res响应结果,整个路由就此结束。

我们整合一下代码。并且精简一下,也跑一遍程序

const express = require('express')
const app = express()

const log = (req,res,next) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
   next()
}

app.use(log)//任何请求都会经过这个log中间件 

app.get('/', (req, res) => {
  console.log(req.route.stack)
  res.send('这是一个根路由!')
})

app.get('/router1', (req, res) => {
  res.send('这是一个router1路由!')
})
app.get('/router2', (req, res) => {
  res.send('这是一个router2路由!')
})


app.listen(3000, () => {
  console.log('app listening on port 3000!')
})
GET '/router2' //打印日志,并且返回结果

这就是一个简单的中间件解释了。大家也可以回去看看你原来写过的代码,是否对之前的use这个玩意有点启发了?

感谢各位的阅读!关于“express.js框架中间件的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: express.js框架中间件的示例分析

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

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

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

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

下载Word文档
猜你喜欢
  • express.js框架中间件的示例分析
    这篇文章给大家分享的是有关express.js框架中间件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。_express.js_作为_Node.js_的老牌框架,是现有框...
    99+
    2022-10-19
  • express.js中间件的示例分析
    这篇文章将为大家详细讲解有关express.js中间件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。express的新开发人员往往对路由处理程序和中间件之间的区...
    99+
    2022-10-19
  • html中框架的示例分析
    小编给大家分享一下html中框架的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 框架是什么?框架就是在一个窗口可以显...
    99+
    2022-10-19
  • Flask框架的示例分析
    这篇文章主要介绍Flask框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!对于python中的框架来说,虽然有一些大型的框架可以供我们挑选,但有时候我们处理数据用不到那么难的框架,这样反而会增加处理数据的...
    99+
    2023-06-14
  • SSM框架的示例分析
    这篇文章主要为大家展示了“SSM框架的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SSM框架的示例分析”这篇文章吧。SSM图示流程:Spring核心:Java反射Mybatis:动态代...
    99+
    2023-06-15
  • SpringMVC框架的示例分析
    小编给大家分享一下SpringMVC框架的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介SpringMVC采用模型(Model)-视图(View)-控...
    99+
    2023-06-02
  • php中laravel框架的示例分析
    这篇文章主要介绍了php中laravel框架的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。laravel的安装首先安装laravel之前要安装composer,如果...
    99+
    2023-06-15
  • JavaScript插件化框架MinimaJS的示例分析
    这篇文章将为大家详细讲解有关JavaScript插件化框架MinimaJS的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript编写的插件化框架——...
    99+
    2022-10-19
  • CSS框架sass的示例分析
    这期内容当中小编将会给大家带来有关CSS框架sass的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。sass结尾的文件有着更严格的格式要求,scss文件更贴近原生...
    99+
    2022-10-19
  • 持久层ORM框架中Hibernate框架的示例分析
    这篇文章主要介绍了持久层ORM框架中Hibernate框架的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言hibernate的概念:hibernate是一个orm...
    99+
    2023-06-25
  • CSS框架开发的示例分析
    这期内容当中小编将会给大家带来有关CSS框架开发的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 Philip Walton 在AppFolio担任前端工程师,他...
    99+
    2022-10-19
  • 使用flexible.js框架的示例分析
    这篇文章主要介绍使用flexible.js框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!基本概念1、视窗viewport可能写过移动端的朋友就知道viewport是什么...
    99+
    2022-10-19
  • php开发框架的示例分析
    这篇文章给大家分享的是有关php开发框架的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、LaravelLaravel是一款免费并且开源的PHP应用框架,它是为开发基于MVC的WEB应用而设计的,个人觉...
    99+
    2023-06-14
  • java框架整合的示例分析
    java框架整合的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。框架整合:Springmvc + Mybatis + Shiro(权限) + REST(服务) + We...
    99+
    2023-06-05
  • SimpleCommand框架ImageLoader API的示例分析
    这篇文章主要介绍SimpleCommand框架ImageLoader API的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在ImageLoader中有以下几个不同的构造器: public ...
    99+
    2023-05-30
    simplecommand imageloader
  • PHP之CI框架的示例分析
    这篇文章将为大家详细讲解有关PHP之CI框架的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 ...
    99+
    2023-06-20
  • vue框架中渐进式的示例分析
    这篇文章主要为大家展示了“vue框架中渐进式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue框架中渐进式的示例分析”这篇文章吧。vue框架的渐进式...
    99+
    2022-10-19
  • Java的ORM框架jOOQ2.0.4的示例分析
    本篇文章给大家分享的是有关Java的ORM框架jOOQ2.0.4的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。jOOQ 2.0.4 发布,该版本引入很多源码生成的提升...
    99+
    2023-06-17
  • Spring框架初始化的示例分析
    这篇文章将为大家详细讲解有关Spring框架初始化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、Spring能做什么?Spring的主要目的是使J2EE易用和促进好编程习惯。倒置控制容器 S...
    99+
    2023-05-30
    spring
  • impress.js表现层框架的示例分析
    这篇文章主要介绍impress.js表现层框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!------------------正文分割线------------------ 概述 如果你已经厌烦了使用Po...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作