广告
返回顶部
首页 > 资讯 > 精选 >Express框架中_router对象数据结构如何使用
  • 682
分享到

Express框架中_router对象数据结构如何使用

2023-07-05 16:07:39 682人浏览 八月长安
摘要

这篇文章主要介绍了Express框架中_router对象数据结构如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Express框架中_router对象数据结构如何使用文章都会有所收获,下面我们一起来看看吧

这篇文章主要介绍了Express框架中_router对象数据结构如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Express框架中_router对象数据结构如何使用文章都会有所收获,下面我们一起来看看吧。

_router 对象介绍

_router 对象是一个私有的属性,但是它保存了重要的内容。其中就包括所有的合理的 Layer 对象以及其他的。它对我们分析 express 运行脉络有很重要的作用。

使用调试直观的获取 _router 对象

要调试就需要准备以下的内容:

  • 一个简单的能运行的 express demo。

  • 使用 vscode 编辑器进行调试。

  • 在合适的地方打上断点并启动带有断点的服务。

  • 观察全部属性并找到 _router 对象以及属性。

  • 找出 stack.layer 的排列顺序得出

  • 分析 _router 的嵌套对象

一个简单的可以运行的 demo

  • index.js 是程序的入口文件:

import express from 'express'const app = express()app.get('/', (_, res)=> {  res.JSON({    ab: 123,  })})app.get('/abc', () => {  res.send('x')})app.listen(3232, () => {  console.log("Listen on port 3232")})

app 上使用了 get 方法添加了两个路由:

  • /: 响应一个 json

  • /abc: 响应一个字符串

然后监听在 3232 端口。

使用 vscode 初始化一个调试文件

{  "version": "0.2.0",  "configurations": [    {      "type": "node",      "request": "launch",      "name": "Launch Program",      "skipFiles": [        "<node_internals>/**"      ],      "program": "${workspaceFolder}/index.js"    }  ]}

调试文件会以 ${workspaceFolder}/index.js 为入口启动 express 服务,在 vscode 侧边栏找到调试项目,开始调试。

在合适的地点打一个断点

哪里合适?

当然是在 listen 之前最为合适,此时 express 内部工作已经基本完成,只需要监听端口等待请求到来。

Express框架中_router对象数据结构如何使用

启动服务

Express框架中_router对象数据结构如何使用

使用 vscode 调试配置与调试工具启动服务

观察全部属性并找到 _router 对象以及属性

  • 观察全部属性

Express框架中_router对象数据结构如何使用

由于 express 创建 app, 混入了很多的属性和方法所以需要对其进行有基本的认识,其中被本文关注的 _router 是需要重点关注的

  • _router对象

Express框架中_router对象数据结构如何使用

_router 对象属性比较简单,其中需要关注的就是 stack 属性,因为 stack 属性后期会被遍历取出 layer 来获取 handle 执行函数。

找出 stack.layer 的排列顺序

Express框架中_router对象数据结构如何使用

layer 的顺序如下:

  • query: 内置 query 中间件产生

  • expressInit: 内置 exressInit 中间件产生

  • boundDispatch 1: get 路由 / 产生

  • boundDispatch 2: get 路由 /abc 产生

  • _router 的 stack 对象存储的 Layer 实例,不是 route 对象的不添加 layer.route 为空:

Express框架中_router对象数据结构如何使用

以 query 内置中间件为例, route 是 undefined,表示不是路由,反之。

  • 手动添加的路由 router 对象,保存了自己的 route 信息

Express框架中_router对象数据结构如何使用

  • path

  • stack

  • methods

  • ...

Express框架中_router对象数据结构如何使用

route 中保存了自己的 stack 属性,stack 保存属于本路由的 layer, 暂且称之为 routeLayer, routeLayer 实例中保持了 handle 方法,这个方法就是我们在 express 中写的最多的路由处理函数。

Express框架中_router对象数据结构如何使用

分析 _router 的嵌套对象

_router 对象是 app 对象的属性,是整个对象的路由属性。

  • _router.stack 存储了所有的 RouterLayer 对象,stack 中 RouterLayer 有自己的添加顺序,内置 query/expressInit 中间件被首先添加,然后是手动添加的路由和中间件。

  • RouterLayer 中存在 route 属性,纯中间件 route 属性为未定义,路由相关中间件 route 指向 Route 实例对象。app -> _router -> stack -> routerLayer[] -> routerLayer/routerLayer.route -> route.stack -> routeLayer[]/-> routeLayer/routeLayer.handle。

_router 对象的相关源码

app.lazyrouter = function lazyrouter() {  if (!this._router) {    this._router = new Router({      caseSensitive: this.enabled('case sensitive routing'),      strict: this.enabled('strict routing')    });    this._router.use(query(this.get('query parser fn')));    this._router.use(middleware.init(this));  }};

_router 函数在 lazyrouter 函数中被实现,并且是懒实现(有了就不在重新实现了),实现之后立即添加两个中间件。本质就是一个 Router 类的实例。

_router 的数据结构分析

  • _router 不是顶层数据,app 才是。

  • _router 中保存了 router 相关的重要数据。stack 属性中保存所有的 routerlayer 层级数据。

  • _router.stack 的每一个 layer 中 route 属性一个有效路由数据。

  • route 中也保存了 stack route 层的 layer 数据。

  • route 层级的 layer 保存了 handle 和 handle 的参数

  • _router 数据结构中嵌套两个栈一个是 router.stack 栈,一个是 route.stack 栈,保存自己层级的数据。

  • handle 作为底层路由的处理函数,被保存在 route.stack 的 layer 中

_router 中包含 router 和 route 层,每一层都自己的 stack, router 层与 route 层通过 stack 的 layer 中的 route 属性链接,route 与 handle 函数链接通过 route 中 stack 储存的 layer 的 handle 属性链接,这就构成一个 _router 的数据结构:

Express框架中_router对象数据结构如何使用

关于“Express框架中_router对象数据结构如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Express框架中_router对象数据结构如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Express框架中_router对象数据结构如何使用

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

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

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

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

下载Word文档
猜你喜欢
  • Express框架中_router对象数据结构如何使用
    这篇文章主要介绍了Express框架中_router对象数据结构如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Express框架中_router对象数据结构如何使用文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • Express框架view对象如何使用
    本篇内容主要讲解“Express框架view对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架view对象如何使用”吧!Expess View 从指定渲染引擎开始以 m...
    99+
    2023-07-05
  • Express框架req res对象如何使用
    这篇文章主要讲解了“Express框架req res对象如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Express框架req res对象如何使用”吧!Expre...
    99+
    2023-07-05
  • Express框架Router、Route和Layer对象如何使用
    今天小编给大家分享一下Express框架Router、Route和Layer对象如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-05
  • 如何在Go中使用对象和函数来构建框架?
    Go 是一种非常流行的编程语言,其简洁、高效的特性让它在 Web 开发、云计算、网络编程等方面得到广泛应用。在使用 Go 编写应用程序时,构建框架是一个非常重要的环节。本文将介绍如何在 Go 中使用对象和函数来构建框架,让你的应用程序更加灵...
    99+
    2023-11-02
    对象 函数 框架
  • 如何在 Django 中使用 ASP 框架对象?
    Django 是一个非常流行的 Python Web 框架,它提供了许多功能和工具来帮助开发人员快速构建 Web 应用程序。但是,有时候我们需要在 Django 中使用 ASP 框架对象,以便更好地管理我们的 Web 应用程序。在本篇文章中...
    99+
    2023-11-11
    框架 对象 django
  • 如何在Java框架中使用Unix对象?
    Java是一种使用广泛的编程语言,拥有强大的功能和丰富的开发库。在Java中,使用Unix对象可以为我们的开发带来便利。本文将介绍如何在Java框架中使用Unix对象,以及如何使用Unix对象来处理文件和目录。同时,我们还将提供一些示例代码...
    99+
    2023-11-09
    框架 unix 对象
  • Go语言如何在NumPy框架中使用对象?
    NumPy是Python中一个重要的科学计算工具包,它提供了一个强大的多维数组对象和用于处理数组的函数库。但是,NumPy并不是Python中唯一的科学计算工具,有时候我们需要使用其他语言来解决一些问题,比如Go语言。那么,Go语言如何在...
    99+
    2023-08-21
    对象 numpy 框架
  • 在ASP框架中使用数组和关键字来构建复杂的数据结构
    ASP框架是一种用于构建动态Web应用程序的技术,可以使用多种编程语言来实现。在ASP框架中,使用数组和关键字来构建复杂的数据结构是一种常见的技术,它可以帮助开发者更方便地管理和操作数据。 在ASP框架中,数组是一种用于存储多个值的集合,...
    99+
    2023-08-30
    关键字 框架 数组
  • 如何将JavaScript中数据结构的数组与对象进行比较
    本篇文章给大家分享的是有关如何将JavaScript中数据结构的数组与对象进行比较,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在编程中,如果...
    99+
    2022-10-19
  • 深入探讨Go中对象和函数的应用:如何构建高质量的框架?
    在Go语言中,对象和函数是构建高质量框架的重要组成部分。在本文中,我们将深入探讨Go中对象和函数的应用,以及如何使用它们来构建高质量的框架。 对象是指具有属性和方法的数据类型,它们可以封装相关的数据和操作。在Go中,对象被称为结构体。结构体...
    99+
    2023-11-03
    对象 函数 框架
  • C++中如何使用类对象构造函数
    C++中如何使用类对象构造函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于普通类型的对象来说,他们之间的复制是很简单的,自己定义的类的对象同样是对象,谁也...
    99+
    2023-06-17
  • 如何在 ASP 框架中使用 numpy 对象来提高性能?
    在ASP框架中,使用numpy对象可以极大地提高性能。numpy是一个Python科学计算库,提供了高效的多维数组对象和相关的计算函数。在ASP框架中,我们可以使用numpy对象来处理大量的数据,包括从数据库中获取的数据、从文件中读取的数据...
    99+
    2023-06-27
    框架 对象 numpy
  • golang中set数据结构如何使用
    本篇内容主要讲解“golang中set数据结构如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang中set数据结构如何使用”吧!借助map实现golang中没有set数据结构,一般...
    99+
    2023-07-05
  • Java编程算法中,如何使用关键字框架来进行数据结构的优化?
    Java作为一种广泛使用的编程语言,可以使用丰富的数据结构和算法来进行程序设计。在Java编程中,数据结构的优化是非常重要的,因为它可以提高程序的效率和性能。为了实现数据结构的优化,我们可以使用关键字框架(Keyword Framewor...
    99+
    2023-08-19
    编程算法 关键字 框架
  • 如何使用Go中的对象和函数来设计可扩展的框架?
    Go语言是一种非常流行的编程语言,它的简洁性和高效性使得它成为了很多人的首选语言。在Go中,对象和函数是两个非常重要的概念,我们可以使用它们来设计可扩展的框架。在本文中,我们将介绍如何使用Go中的对象和函数来设计可扩展的框架,并提供一些示...
    99+
    2023-11-02
    对象 函数 框架
  • 你知道如何在PHP中使用二维码框架对象吗?
    二维码是一种常用的编码方式,可以将文本、链接、电话号码等信息以图形化的方式展示出来。在PHP中,我们可以使用二维码框架对象来生成二维码,本文将介绍如何在PHP中使用二维码框架对象。 一、安装二维码框架对象 PHP中有多个二维码框架对象可供选...
    99+
    2023-07-31
    二维码 框架 对象
  • C++面向对象中构造函数如何使用
    这篇“C++面向对象中构造函数如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++面向对象中构造函数如何使用”文章吧...
    99+
    2023-07-04
  • Laravel框架中如何使用MongoDB数据库
    这篇文章主要为大家展示了“Laravel框架中如何使用MongoDB数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Laravel框架中如何使用MongoDB数据库”这篇文章吧。先确定好自己...
    99+
    2023-06-29
  • 如何使用C++中的数据结构函数?
    如何使用C++中的数据结构函数?数据结构是计算机科学中的重要概念,它涉及如何组织和存储数据以便有效地访问和操作。C++是一种强大的编程语言,提供了许多内置的数据结构函数,开发人员可以使用这些函数来创建、操作和管理不同类型的数据结构。在本文中...
    99+
    2023-11-18
    C++编程 (C++ programming) 数据结构 (data structures) 函数使用 (Functio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作