11 路由参数

在本节中,我们将深入探讨 Express.js 中的路由参数。路由参数为我们创建动态和灵活的路由提供了强大的支持。通过路由参数,我们可以定义 URL 中的可变部分,并在处理请求时提取这些参数。

1. 什么是路由参数

路由参数 是在路由定义中指定的路径部分,它以冒号(:)开头。这些参数在请求到达服务器时会被解析,并可以在处理请求的回调函数中访问。

例如,在访问路径 /users/:userId 时,:userId 就是一个路由参数。如果用户请求 /users/42,那么 userId 的值将是 42

2. 如何定义路由参数

在 Express.js 中,我们可以通过简单的语法来定义路由参数。以下是一个基本的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
const express = require('express');
const app = express();

// 定义路由,带有路由参数
app.get('/users/:userId', (req, res) => {
const userId = req.params.userId; // 从请求中提取参数
res.send(`用户ID是: ${userId}`);
});

// 启动服务器
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});

在这个例子中,当用户访问 http://localhost:3000/users/42 时,服务器将响应 用户ID是: 42

3. 路由参数的多个值

路由参数也可以包含多个值。我们可以在路由中定义多个参数,如下所示:

1
2
3
4
5
app.get('/products/:productId/reviews/:reviewId', (req, res) => {
const productId = req.params.productId;
const reviewId = req.params.reviewId;
res.send(`产品ID是: ${productId}, 评论ID是: ${reviewId}`);
});

在这个示例中,如果用户访问 http://localhost:3000/products/101/reviews/5,那么响应将是 产品ID是: 101, 评论ID是: 5

4. 路由参数的匹配

Express.js 支持多种路由参数匹配。以下是几个示例:

  • 只匹配数字:如果我们只想匹配数字,可以使用正则表达式。在路由定义中以 (:param) 的形式指明:
1
2
3
app.get('/posts/:postId(\\d+)', (req, res) => {
res.send(`这是编号为 ${req.params.postId} 的帖子`);
});

在此示例中,只有数字形式的 postId 会被匹配。如果用户访问 /posts/abc,将不会匹配到这个路由。

  • 可选参数:使用 ? 可以定义可选的路由参数:
1
2
3
4
5
app.get('/search/:query?/:page?', (req, res) => {
const query = req.params.query || '无查询';
const page = req.params.page || 1;
res.send(`查询为: ${query}, 当前页面: ${page}`);
});

如果用户只访问 /search/test,则 页面 参数将会被默认设置为 1

5. 提取路由参数的常用方法

在 Express.js 中,提取 路由参数 的主要方法是使用 req.params 对象。在这个对象中,路由参数的名称作为属性,参数值则为其对应的值。如下示例:

1
2
3
4
app.get('/users/:username', (req, res) => {
const { username } = req.params; // 解构赋值
res.send(`欢迎, ${username}!`);
});

在访问 /users/JohnDoe 时,结果将会是 欢迎, JohnDoe!

6. 总结

在本节中,我们学习了 路由参数 的定义和使用方式。路由参数允许我们创建更灵活的路由,能够处理动态请求,同时提取重要的信息用于后续处理。在下一节中,我们将进一步探索如何实现 动态路由,以便使我们的路由更加强大和智能。

希望本节能够帮助你更好地理解 Express.js 的路由参数特性。请继续关注接下来的内容,我们将一起深入学习动态路由的实现与应用。

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

学习下节

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论