返回顶部
首页 > 资讯 > 精选 >Express框架Router、Route和Layer对象如何使用
  • 750
分享到

Express框架Router、Route和Layer对象如何使用

2023-07-05 16:07:11 750人浏览 八月长安
摘要

今天小编给大家分享一下Express框架Router、Route和Layer对象如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了

今天小编给大家分享一下Express框架Router、Route和Layer对象如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Layer

Layer 是什么? Express 中最小的存储单元,存储的重要内容包括 handle 也就是 fn、path 等路径。fn 就是中间件处理函数。重要的是 route 中能匹配:

module.exports = Layer;function Layer(path, options, fn) {  if (!(this instanceof Layer)) {    return new Layer(path, options, fn);  }  var opts = options || {};  this.handle = fn;  this.name = fn.name || '<anonymous>';  this.params = undefined;  this.path = undefined;  this.regexp = pathRegexp(path, this.keys = [], opts);  this.regexp.fast_star = path === '*'  this.regexp.fast_slash = path === '/' && opts.end === false}Layer.prototype.handle_error = function handle_error(error, req, res, next) {}Layer.prototype.handle_request = function handle(req, res, next) {}Layer.prototype.match = function match(path) {} // 返回 boolean

看看哪些的内容实例化了 Layer 的构造函数。Layer 的最主要的作用就是,被路由匹配到,然后取出 handle 函数最后调用,消费 handle 函数。

  • Route

一个 Route 的栈 stack 中,可以存放多个 Layer。

Route.prototype.all = function all() {        var layer = Layer('/', {}, handle);    }Route.prototype[method] = function(){      var layer = Layer('/', {}, handle);   }
  • Router 中

proto.route = function route(path) {  // ***  var layer = new Layer(path, {    sensitive: this.caseSensitive,    strict: this.strict,    end: true  }, route.dispatch.bind(route)); // *** this.stack.push(layer);};
proto.use = function use(fn) {     var layer = new Layer(path, {      sensitive: this.caseSensitive,      strict: false,      end: false    }, fn);    this.stack.push(layer);}

在 Router 中的 route 和 use 函数,使用 Layer 构造函数实例化 layer, 然后将 layer 压到 stack 中保存卡里,方便以后匹配。

  • layer 的匹配方法

function matchLayer(layer, path) {  try {    return layer.match(path);  } catch (err) {    return err;  }}

从上面的代码中知道,layer 对象的 match 方法,根据路径进行匹配, match 返回 boolean. 在匹配的时候主要处理了两个属性:

this.params = undefined;this.path = undefined;

接下来看 matchLayer 函数, matchLayer 调用在 Router.handle 函数的 next 函数中。

Route

module.exports = Route;function Route(path) {  this.path = path;  this.stack = [];  this.methods = {};}Route.prototype._handles_method = function _handles_method(method) {}Route.prototype._options = function _options() {}Route.prototype.dispatch = function dispatch(req, res, done) {}Route.prototype.all = function all() {}// 扩展 methods 包中的方法

Router

Router 就是 proto

var proto = module.exports = function(options) {}proto.param = function param(name, fn) {}proto.handle = function handle(req, res, out) {}proto.process_params = function process_params(layer, called, req, res, done) {}proto.use = function use(fn) {}proto.route = function route(path) {}// 扩展 methods + all 上所有的方法

注意: Router.handle 函数.

var stack = self.stack;while (match !== true && idx < stack.length) {}

在 while 循环中,使用 idx 中取出 layer 和 path然后交给 matchLayer 函数, 得到匹配结果。如果调用的内容正常:

layer.handle_request(req, res, next) // 最终会得到中间件的处理函数

接下来盘点, Router/Route/Layer 的常用方法

方法统计

  • Router

Router 方法说明
Router param参数
Router handle处理函数
Router process_params处理参数
Router use中间件
Router route路由
Router [methods]/all各种方法
  • Route

Route 方法说明
Route _handles_method私有处理函数
Route _options私有选项
Route dispatch派发请求和响应
Route all各种方法
Route [methods]各种方法
  • Layer

Layer 方法说明
Layer handle_error处理错误
Layer handle_request处理请求
Layer match根据路径匹配路由并返回 boolean

看 Router 和 Route 有相同的方法: all/[methods]。使用 Router.route 的方法通过 path 方法关联。同时 咋 Router.route 中实例化 Layer ,然后将 layer 保存在 Router 的 stack 中。

两个 stack

从上面的分析中,知道了 Router 中有 stack,Route 中也有 stack, 在 stack 中添加内容(也就是 Layer)一般都是与路由和中间件相关。

  • Router 的 use 方法中,包含了实例化 Layer, 并存储在 Router 级别的 stack 中。

  • Router 的 route 中,实例化了 Layer, 并存储在 Router 级别的 stack 中。

  • Router 的 [methods]/all 方法中,调用了 route 方法,自然也存储了 stack

取出 stack 中 layer

取出 Layer 发生在 Route 的 dispatch 函数 的 next 函数中,此时需要调用 layer 中匹配到的参数。

从 Router 到 layer 的路径

  • Router 是被 express 单独的输出出去的。

  • Router 实例化之后,可以调用 use/[methods] 实例化 Layer 并保存 stack 中,当然也可调用 Router.route 方法。

Router.route 方法中的 dispatch

var layer = new Layer(path, {    sensitive: this.caseSensitive,    strict: this.strict,    end: true}, route.dispatch.bind(route));

route.dispatch 在此处 bind 绑定,此时作为 Layer 构造函数的第三个参数,保存为 handle, 最后会被拿出调用。此时就进入了 next 函数调用阶段。

next 函数

next 函数是 Express 中间件的基础,dispatch 函数从 当前的 stack 中拿出 layer 的实际情况调用 layer 不同的方法。

if (layer.method && layer.method !== method) {  next(err)}

当 layer 中的方法或者等于但当前的方法时,调用自己,此时 next 函数发生了递归。否则进入 handle 相关方法处理请求和处理错阶段,此时 next 方法发生了递归调用。

以上就是“Express框架Router、Route和Layer对象如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Express框架Router、Route和Layer对象如何使用

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

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

猜你喜欢
  • Express框架Router、Route和Layer对象如何使用
    今天小编给大家分享一下Express框架Router、Route和Layer对象如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-05
  • Express框架Router Route Layer对象使用示例详解
    目录引言LayerRouteRouter方法统计两个 stack取出 stack 中 layer从 Router 到 layer 的路径Router.route 方法中的 dispa...
    99+
    2023-03-24
    Express使用Router Route Layer Express 对象
  • 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框架reqres对象使用详解
    目录IncomingMessageServerResponse请求对象 req响应对象设置状态码如何来快速测试这些属性和方法呢?下面给出一些示例代码目录结构安装依赖小结Express...
    99+
    2023-03-24
    Express框架req res对象 Express req res
  • Express框架中_router对象数据结构如何使用
    这篇文章主要介绍了Express框架中_router对象数据结构如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Express框架中_router对象数据结构如何使用文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • 一文解析Express框架view对象使用
    目录Expess View 从指定渲染引擎开始安装依赖从 res.render 函数开始View 的实现mustache 的render 方法的实现一个案例切图案例在 express...
    99+
    2023-03-10
    Express框架view对象 Express view
  • Node.js 中如何使用Express框架
    这期内容当中小编将会给大家带来有关Node.js 中如何使用Express框架,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Node.js Express 框架Expre...
    99+
    2024-04-02
  • Express框架app函数如何使用
    本篇内容主要讲解“Express框架app函数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架app函数如何使用”吧!express 函数来源首先要搞明白 express...
    99+
    2023-07-05
  • Node第三方框架Express如何使用
    这篇文章主要讲解了“Node第三方框架Express如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node第三方框架Express如何使用”吧!1....
    99+
    2024-04-02
  • 如何在Java框架中使用Unix对象?
    Java是一种使用广泛的编程语言,拥有强大的功能和丰富的开发库。在Java中,使用Unix对象可以为我们的开发带来便利。本文将介绍如何在Java框架中使用Unix对象,以及如何使用Unix对象来处理文件和目录。同时,我们还将提供一些示例代码...
    99+
    2023-11-09
    框架 unix 对象
  • 如何在 Django 中使用 ASP 框架对象?
    Django 是一个非常流行的 Python Web 框架,它提供了许多功能和工具来帮助开发人员快速构建 Web 应用程序。但是,有时候我们需要在 Django 中使用 ASP 框架对象,以便更好地管理我们的 Web 应用程序。在本篇文章中...
    99+
    2023-11-11
    框架 对象 django
  • Django 和 ASP 框架对象:如何选择正确的框架?
    在开发 Web 应用程序时,选择正确的框架是至关重要的。框架可以帮助你加快开发速度,减少代码错误,提高应用程序的可维护性。Django 和 ASP 是两个流行的框架,它们都有自己的优缺点。在本文中,我们将比较 Django 和 ASP 框...
    99+
    2023-11-11
    框架 对象 django
  • 如何配置ABP框架使用对象映射
    小编给大家分享一下如何配置ABP框架使用对象映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DTO和实体实体实体是领域驱动设计(Domain Driven De...
    99+
    2023-06-29
  • 如何在Go中使用对象和函数来构建框架?
    Go 是一种非常流行的编程语言,其简洁、高效的特性让它在 Web 开发、云计算、网络编程等方面得到广泛应用。在使用 Go 编写应用程序时,构建框架是一个非常重要的环节。本文将介绍如何在 Go 中使用对象和函数来构建框架,让你的应用程序更加灵...
    99+
    2023-11-02
    对象 函数 框架
  • Go语言如何在NumPy框架中使用对象?
    NumPy是Python中一个重要的科学计算工具包,它提供了一个强大的多维数组对象和用于处理数组的函数库。但是,NumPy并不是Python中唯一的科学计算工具,有时候我们需要使用其他语言来解决一些问题,比如Go语言。那么,Go语言如何在...
    99+
    2023-08-21
    对象 numpy 框架
  • 如何使用Go语言对象对NumPy框架进行优化?
    NumPy是Python科学计算中最重要的库之一,它提供了高效的数组和矩阵运算,是许多数据科学家和研究人员必不可少的工具。然而,NumPy在处理大规模数据时,性能可能会受到限制。在本文中,我们将介绍如何使用Go语言对象对NumPy框架进行...
    99+
    2023-08-21
    对象 numpy 框架
  • python scrapy框架中Request对象和Response对象怎么用
    本篇内容介绍了“python scrapy框架中Request对象和Response对象怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-06-29
  • ASP 框架对象和 Django:如何在两个框架之间进行比较?
    ASP框架对象和Django:如何在两个框架之间进行比较? 在现代Web开发中,框架是必不可少的工具。ASP框架和Django是两个非常流行的框架,它们都提供了强大的工具来简化Web开发。但是,它们之间的差异是什么?本文将介绍ASP框架对象...
    99+
    2023-11-11
    框架 对象 django
  • 配置ABP框架使用对象映射
    目录DTO和实体实体DTO麻烦的映射AutoMapper 集成IObjectMapper/ObjectMapper对象拓展DTO和实体 实体 实体是领域驱动设计(Domain Dri...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作