第4章 Express路由的深入理解(二)

news2024/11/15 17:37:04
4 路由分组

路由分组用于将相关的路由组织在一起,使代码更具模块化和可维护性。可以通过使用 express.Router 创建路由组。

示例:

const express = require('express');
const app = express();
const apiRouter = express.Router();
const userRouter = express.Router();
const productRouter = express.Router();

// 定义用户相关的路由
userRouter.get('/', (req, res) => {
    res.send('User list');
});

userRouter.get('/:id', (req, res) => {
    res.send(`User ID: ${req.params.id}`);
});

// 定义产品相关的路由
productRouter.get('/', (req, res) => {
    res.send('Product list');
});

productRouter.get('/:id', (req, res) => {
    res.send(`Product ID: ${req.params.id}`);
});

// 将用户和产品路由分别挂载到 /users 和 /products 路径
apiRouter.use('/users', userRouter);
apiRouter.use('/products', productRouter);

// 将 API 路由挂载到应用中
app.use('/api', apiRouter);

// 启动服务器
const port = 3000;
app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

当用户访问 /api/users/api/products 时,将分别看到 “User list” 和 “Product list”。访问 /api/users/123/api/products/456 时,将分别看到 “User ID: 123” 和 “Product ID: 456”。

代码详解:

  • apiRouter.use('/prefix', router):将路由器挂载到 API 路由器中,并为路由器内的所有路由添加共同的前缀。
5 高级路由用法

在 Express 中,可以通过各种方法增强路由的功能,包括使用正则表达式定义路由、处理多种 HTTP 方法和使用异步函数处理路由。

1 使用正则表达式定义路由

可以使用正则表达式定义更加复杂的路由,以匹配特定的 URL 模式。

示例:

app.get(/^\/users\/(\d+)$/, (req, res) => {
    const userId = req.params[0];
    res.send(`User ID (from regex): ${userId}`);
});

当用户访问 /users/123 时,响应内容将为 “User ID (from regex): 123”。

代码详解:

  • app.get(/^\/users\/(\d+)$/, callback):使用正则表达式定义路由,匹配 /users/ 后跟一个或多个数字的 URL。
2 处理多种 HTTP 方法

可以使用 app.route 方法处理同一路径的多种 HTTP 方法。

示例:

app.route('/resource')
    .get((req, res) => {
        res.send('GET request to /resource');
    })
    .post((req, res) => {
        res.send('POST request to /resource');
    })
    .put((req, res) => {
        res.send('PUT request to /resource');
    })
    .delete((req, res) => {
        res.send('DELETE request to /resource');
    });

代码详解:

  • app.route('/path').method(callback):为同一路径定义多种 HTTP 方法的处理函数。
3 使用异步函数处理路由

可以使用异步函数处理路由,以便处理异步操作,如数据库查询或外部 API 调用。

示例:

app.get('/async', async (req, res) => {
    try {
        const data = await fetchDataFromDatabase();
        res.json(data);
    } catch (error) {
        res.status(500).send('Internal Server Error');
    }
});

async function fetchDataFromDatabase() {
    // 模拟异步数据库查询
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({ message: 'Data fetched from database' });
        }, 1000);
    });
}

在这里插入图片描述

代码详解:

  • async (req, res):使用异步函数处理路由。
  • await fetchDataFromDatabase():等待异步操作完成。
  • res.json(data):发送 JSON 响应。
6 路由的错误处理

在 Express 中,可以通过中间件处理路由中的错误。错误处理中间件是一个带有四个参数的函数:errreqresnext

示例:

// 定义一个路由,模拟抛出错误
app.get('/error', (req, res, next) => {
    const err = new Error('Something went wrong');
    next(err); // 将错误传递给错误处理中间件
});

// 错误处理中间件
app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Internal Server Error');
});

// 启动服务器
const port = 3000;
app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

在这里插入图片描述

代码详解:

  • next(err):将错误传递给错误处理中间件。
  • 错误处理中间件:带有四个参数,用于处理所有传递过来的错误。

通过本章内容,读者应该能够理解并掌握 Express 路由的高级用法,包括参数化路由、嵌套路由、路由前缀、路由分组和高级路由技术。这些知识将帮助读者构建复杂且灵活的路由系统,以处理各种类型

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

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

相关文章

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业 为了方便日后复习,青书学堂成人大专试题整理。 若有未整理的课程,请私信我补充,欢迎爱学习的同学们收藏点赞关注!文章内容仅限学习使用!!&#xf…

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包,离线进行安装 ,用于软件封装。 测试下载一个gcc和依赖环境,关闭默认在线源,测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…

每日练习,不要放弃

目录 题目1.下面叙述错误的是 ( )2.java如何返回request范围内存在的对象?3.以下代码将打印出4.下列类定义中哪些是合法的抽象类的定义?()5.以下代码段执行后的输出结果为6.以下代码运行输出的是总结 题目 选自牛客网 1.下面叙述…

几何相关计算

目录 一、判断两个矩形是否相交 二、判断两条线段是否相交 三、判断点是否在多边形内 四、垂足计算 五、贝塞尔曲线 六、判断多边形顺时针还是逆时针 七、判断凹多边形 一、判断两个矩形是否相交 当矩形1的最大值比矩形2的最小值都小,那矩形1和矩形2一定不相…

ollama + fastgpt 搭建免费本地知识库

目录 1、ollama ollama的一些操作命令: 使用的方式: 2、fastgpt 快速部署: 修改配置: config.json: docker-compose.yml: 运行fastgpt: 访问OneApi: 添加令牌和渠道: 登陆fastgpt,创建知识库和应用 3、总结: 附录: 1. 11434是ollama的端口: 2. m3e 测…

SCI成稿丨计算机结合,中三区

Web服务器在慢速DDoS攻xxx改进研究互联网技术下基于xxx智能化交互空间艺术研究智慧城市视角企业经济发展中节xxxxx无线网络遥感图像xxx设计和规划中的应用分析基于智能物联网的生态养老控制系统与xxx展基于心理行为大数据分类算法的心理xxxxxxxxxx终端技术对消费者行为分析及客…

使用llama.cpp量化模型

文章目录 概要整体实验流程技术细节小结 概要 大模型量化是指在保持模型性能尽可能不变的情况下,通过减少模型参数的位数来降低模型的计算和存储成本。本次实验环境为魔搭社区提供的免费GPU环境(24G),使用Llama.cpp进行4bit量化可…

go 语言实现快速排序

快速排序 - go 一、思路二、步骤及图解三、代码实现四、复杂度分析 一、思路 快速排序是一种分治策略的排序算法,关键过程是对数组进行划分。选择一个基准值(pivot element),围绕着这个基准值划分子数组,对子数组递归调…

CyberVadis认证流程

1. 评估现有安全实践:组织需要对其现有的安全实践进行全面评估,包括安全策略、技术架构、人员安全意识等。 2. 确定目标:根据组织的需求和目标,确定需要改进的领域和优先级。 3. 制定计划:制定详细的认证计划&#x…

在 Windows 上开发.NET MAUI 应用_2.生成你的第一个应用

先决条件 Visual Studio 2022 17.8 或更高版本,并安装了 .NET Multi-platform App UI 工作负载。 可参考上一篇文章:http://t.csdnimg.cn/n38Yy 创建应用 1.启动 Visual Studio 2022。 在开始窗口中,单击“创建新项目”以创建新项目&#…

美式键盘 QWERTY 布局的来历

注:机翻,未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…

黑马头条Day02-app端文章查看,静态化freemarker

学习内容: 一、app端文章列表 1. 需求分析 文章的布局展示 2. 导入文章数据库 可以使用IDEA的数据库连接工具执行SQL脚本 3. 表结构分析 ap_article文章基本信息表 ap_article_config文章配置表 ap_article_content文章内容表 把课前资料里提供的实体类复制到mod…

转移C盘中的conda环境(包括.condarc文件修改,environment.txt文件修改,conda报错)

conda环境一般是默认安装到C盘的,若建立多个虚拟环境,时间长了,容易让本不富裕的C盘更加雪上加霜,下面给出将conda环境从C盘转移到D盘的方法。 目录 电脑软硬件转移方法查看当前conda目录转移操作第一步:.condarc文件修…

vmware虚拟机中,Centos安装Docker,解决国内无法访问

背景 本文主要解决了centos 的yum源 无法更新 和 docker的 源 国内无法访问的问题。 本文环境:windows宿主机装了vmware虚拟机,虚拟机中安装了Centos,centos内装docker。其实可以直接在window装docker desktop for windows,但…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单,所以自己改了一个demo,把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹: (后续的运行指令后面都需要…

JVM---对象是否存活及被引用的状态

1.如何判断对象是否存活 1.1 引用计数算法 概念:在对象头部增加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 优点&#xff1…

喰星云·数字化餐饮服务系统 多处 SQL注入漏洞复现

0x01 产品简介 喰星云数字化餐饮服务系统是一款专为餐饮企业设计的综合性管理软件,旨在通过信息化手段提升餐饮企业的运营效率、降低运营成本,并实现数据驱动的决策管理。该系统包括供应链管理、财务管理、巡店管理、人力资源管理等多个模块,可全面覆盖餐饮企业的日常运营需…

【多线程综合】java何时考虑线程安全问题、怎么考虑、又怎么解决?

前言:在编程中,线程安全是一个非常重要的概念。它涉及到多个线程并发访问共享资源时的正确性和一致性。在Java中,为了确保线程安全,我们需要考虑一些关键因素。 1、什么是线程安全 线程安全是指当多个线程同时访问一个对象时&am…

十大排序 之 快速排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦代码后边有图解哦 介绍 快速排序英文名为Quick Sort 基本思路 快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素base,利用base将待排序的序列分…

基于RK3588的8K视频解码显示案例分享!引领超高清工业视频时代

8K、4K、2K显示对比 2K分辨率:也称为全高清(FULL HD),它具有1920 x 1080像素的分辨率。这是目前大多数消费者电视和电脑显示器的标准分辨率,可以提供良好的图像质量。 4K分辨率:也称为4K超高清&#xff0…