NodeJS Web 框架 Express 之路由

news2025/1/13 17:06:15

NodeJS Web 框架 Express 之路由

  • 参考
  • 描述
  • 路由
      • 路由匹配规则
      • 顺序匹配
  • 模块化
      • 创建
      • 使用
      • 前缀

参考

项目描述
哔哩哔哩黑马程序员
搜索引擎Bing

描述

项目描述
Edge109.0.1518.61 (正式版本) (64 位)
NodeJSv18.13.0
nodemon2.0.20
Express4.18.2

路由

在 Web 中,路由可以理解为 URL 与函数的映射关系。当一个请求从客户端发送到服务器端时,都需要与已定义的路由进行匹配,当匹配成功时将调用对应的回调函数以对客户端的请求进行响应。

路由匹配规则

URL 与路由匹配成功需要满足客户端发出的请求的请求类型及该请求所请求的路径均与路由相应的设置匹配成功。

举个栗子:

// 包含 NodeJS 第三方模块 express
const express = require('express');

// 创建服务器对象
const app = express();
// 监听本机 9090 端口
app.listen(9090);

// 建立路由
app.get('/', (req, res) => {
    res.send('GET /');
});
app.get('/user', (req, res) => {
    res.send('GET /user');
});
app.post('/user/RedHeart', (req, res) => {
    res.send('POST /user/RedHeart');
});

注:

上述示例中,建立的路由将依次与如下类型的请求匹配成功:

  1. 客户端通过 GET 请求方式请求 127.0.0.1:9090/
  2. 客户端通过 GET 请求方式请求 127.0.0.1:9090/user
  3. 客户端通过 POST 请求方式请求 127.0.0.1:9090/user/RedHeart

顺序匹配

请求的 URL 将与程序中建立建立的路由依次匹配,一旦匹配成功便停止匹配。

// 包含 NodeJS 第三方模块 express
const express = require('express');

const app = express();
// 监听本机 9090 端口
app.listen(9090);

// 建立路由
app.get('/', (req, res) => {
    res.send('First');
});
app.get('/', (req, res) => {
    res.send('Second');
});

执行结果:

执行结果

模块化

Express 并不推荐向前面的示例那样直接将路由挂载到 express() 也即 app 上,而是推荐将路由单独抽离出来作为模块进行使用。

创建

首先我们需要创建一个 JavaScript 文件用于存放路由模块,并在该文件中添加如下内容以创建路由模块。

const express = require('express');
const router = express.Router();

// 创建路由
router.get('/', (req, res) => {
    res.send('GET /');
})
router.get('/user', (req, res) => {
    res.send('GET /user');
})

// 将路由进行导出
module.exports = router;

使用

// 导入 NodeJS 内置模块 path 用于拼接路径
const path = require('path');
// 导入位于当前工作目录下的路由模块
const router = require(path.join(__dirname, './navigator'));
// 导入 NodeJS 第三方模块 Express
const express = require('express');


const app = express();

// 监听本机的 9090 端口
app.listen(9090);
// 将导入的路由模块进行注册
app.use(router);

在对路由模块进行注册后,路由便开始正常工作了。
在本示例中,访问如下链接你将得到如下响应。

链接响应
127.0.0.1:9090/GET /
127.0.0.1:9090/userGET /user

前缀

你可能希望为创建的路由添加一个统一的前缀,这里我们尝试为路由添加一个统一的前缀 RedHeart 。在此示例中,我们仅修改一行代码,其他内容与上一个示例无异。

app.use(router);

修改为

app.use('/RedHeart', router);

修改后,在本示例中,访问如下链接你将得到如下响应。

链接响应
127.0.0.1:9090/RedHeartGET /
127.0.0.1:9090/redheart/userGET /user

注:

在 URL 中是 不区分大小写 的,所以无论你访问的是 127.0.0.1:9090/RedHeart 还是 127.0.0.1:9090/redheart,得到的结果都是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

体验 micronaut 微服务框架

体验 micronaut 微服务框架谁在使用 MICRONAUT主要特点代码示例展示几点特性原生云原生安装 Micronaut 命令行工具创建一个 MICRONAUT 应用程序MICRONAUT是基于 JVM 的现代全栈框架,用于构建模块化、易于测试的微服务和无服务器应用程序。 谁在使用 MICRONAUT 主要…

数学建模——评价算法

层次分析法(AHP) 步骤 1.建立层次结构模型; 2.构造判断(成对比较)矩阵; 3.层次单排序及其一致性检验; 4.层次总排序及其一致性检验; 建立层次结构模型 将决策的目标、考虑的因素(决策准则)和决策对象按…

【HBase入门】5. 常用 Shell 操作(2)

前言 我们可以以shell的方式来维护和管理HBase。例如:执行建表语句、执行增删改查操作等等。 导入测试数据集 需求 在资料的 数据集/ ORDER_INFO.txt 中,有一份这样的HBase数据集,我们需要将这些指令放到HBase中执行,将数据导入…

申请Moonbeam Accelerator孵化计划申请答题指导

Moonbeam Accelerator是一个为期10 周的孵化计划,由Moonbeam基金会、Arrington Capital和Rokk3r共同推出,旨在帮助初创团队提高技术、业务、营销、金融和融资技能,助力您的Web3创业之梦。 申请孵化计划有任何限制吗?没有&#xff…

BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历

目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。…

VUE3/TS/TSX入门手册指北

VUE3入门手册vue3入门首先 查看 官方文档:https://cn.vuejs.org/guide/quick-start.html如果有vue2基础,速成课程:https://www.zhoulujun.co/learning-vue3/component.html(官方文档 还是建议 翻一遍)VUE3深入首先看源…

STM32+python产生三角波

目录任务目标实现方法python制作数表由于项目需要,需要产生一个三角波,需要覆盖4000个点的一个数组,这样的数组点数太多了,肯定不能自己一个一个手写了。最简单的一个方法是在嵌入式程序中用C写一个函数,对一个数组&am…

基于蜣螂优化的Elman神经网络数据预测-附代码

基于蜣螂算法优化的Elman神经网络数据预测 - 附代码 文章目录基于蜣螂算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立4.基于蜣螂优化的Elman网络5.测试结果6.参考文献7.Matlab代码摘要:针对…

LwIP系列--内存管理(内存池)详解

一、目的在《LwIP系列--内存管理(堆内存)详解》中我们详细介绍了LwIP中内存堆的实现原理,本篇我们介绍LwIP中内存池的实现细节。在LwIP源码中为了满足特定内存分配的需要以及优化内存占用制定了各种尺寸大小的内存池(每种内存池管…

Golang应用执行Shell命令实战教程

本文学习如何在Golang程序中执行Shell命令(如,ls,mkdir或grep),如何通过stdin和stdout传入I/O给正在运行的命令,同时管理长时间运行的命令。为了更好的理解,针对不同场景由浅入深提供几个示例进…

77、TensoRF: Tensorial Radiance Fields

简介 主页:https://apchenstu.github.io/TensoRF/ 总体而言,该文章主要内容于DVGO类似 将场景的亮度场建模为4D张量,它表示一个具有每体素多通道特征的3D体素网格,中心思想是将4D场景张量分解为多个紧凑低秩张量分量&#xff0c…

06 | 要找工作了,应该如何准备?

前言 前言:找工作更像相亲,总有一款适合自己。简历就像一份广告,对方要什么你写什么,而不是你有什么。 文章目录前言一、找工作的流程二、做法1. 分析职位描述(JD)1)组成2)做法一、找…

【数据结构】7.2 线性表的查找

7.2.1 顺序查找(线性查找) 应用范围: 顺序表或线性链表表示的静态查找表。表内元素之间可以无序。 数据元素类型定义: 数据表可能有多个数据域的值,比如成绩表中有姓名、成绩、总分等。所以用结构类型来表示要存储…

背景颜色和背景图片

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <!--这行代码是告诉浏览器需要使用"utf-8"字符集打开 因为HBuilder工具是采用utf-8编码的 注意&#xff1a;并不是设置当前页面的字符集编码方式--> …

SpringMVC(十二):SpringMVC文件下载

文章目录 SpringMVC文件下载 一、下载之前的准备 二、下载的基本流程 三、下载的请求数据 1、下载的后台实现 2、下载的示例代码 SpringMVC文件下载 一、下载之前的准备 展示所有玩家信息&#xff0c;包括图片展示。 <% page contentType"text/html;charset…

Linux_常见命令

1.ls ls -l 列出隐藏文件&#xff0c;并显示10项权限,类似如同下图 在部分发行版本的linux下&#xff0c;ll等同于ls -l 首先&#xff0c;第一列为-则代表着这一列是文件&#xff0c; 第一列为d则代表这一列为目录 除了第一位&#xff0c;那么其他还有9位&#xff0c;分为3组…

学习shell与shell script 02_vim 的保存恢复与打开时的警告信息

[1] Stopped vim test.txt $kill -9 %1[1] Stopped vim test.txt $jobs [1] Killed vim test.txt编辑一个文件后&#xff0c;使用Ctrl z 挂起。然后被不正常中断&#xff0c;导致暂存盘无法通过正常的流程来结束。所以暂…

AHB协议(2/2)

Charpter 4 Bus Interconnection 4.1 互联结构 互联结构在系统中提供了M端和S端的连接。单一的M端只需要使用一个解码器和多路选择器。 一个多M端的系统中需要使用提供仲裁和将信号从不同的M端分发到对应的S端的互联结构。分发结构需要地址&#xff0c;控制信号和写数据。 4…

ARM uboot的常用命令

一、uboot 的常用命令1 1、类似 linux 终端的行缓冲命令行 (1) 行缓冲的意思就是&#xff1a;当我们向终端命令行输入命令的时候&#xff0c;这些命令没有立即被系统识别&#xff0c;而是被缓冲到一个缓存区&#xff08;也就是系统认为我们还没有输入完&#xff09;&#xff…

2.5 变量与常量

文章目录1.变量1.1 变量的声明1.2 变量的命名1.3 变量的初始化1.4 变量的使用2 常量1.变量 和其他的编程语言一样&#xff0c;JAVA也是用变量来存储值的&#xff0c;常量可以理解为一种特殊的变量&#xff0c;其特殊在它的值是不变的。 1.1 变量的声明 声明变量本质就是创造…