Logo
Section 1 / 4

动态路由与路由参数

学习如何在 Express.js 中使用动态路由和参数来创建灵活且高效的 API。

导入

动态路由与路由参数

学习如何在 Express.js 中使用动态路由和参数来创建灵活且高效的 API。

点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试动态路由。

  • 使用 ID 测试用户路由: 向 /users/:id 端点发送一条 GET 请求。将 :id 替换为任意用户 ID 值。

    1curl -X GET http://localhost:3000/users/123

    预期响应:

    1User ID: 123

点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试带有动态 URL 参数的路由。

  • 测试带参数的路由: 向 /users/:userId/orders/:orderId 路由发送一条 GET 请求。请将 URL 中的参数替换为实际值。

    1curl -X GET http://localhost:3000/users/123/orders/456

    预期响应:

    1User ID: 123, Order ID: 456

点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令分别测试包含和不包含可选 id 参数的路由。

  1. 包含 id 参数: 向 /users/123 发送一条 GET 请求。

    1curl http://localhost:3000/users/123

    预期响应:

    1User ID: 123
  2. 不包含 id 参数: 向 /users 发送一条 GET 请求(未提供 ID)。

    1curl http://localhost:3000/users

    预期响应:

    1User ID is not provided.

点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试有效和无效的 id 值。

  1. 有效的数字 ID: 发送一个带有数值型 id 的 GET 请求,应返回 "User ID: <id>"。

    1curl http://localhost:3000/users/42

    预期响应:

    1User ID: 42
  2. 无效的非数字 ID: 发送一个带有非数值型 id 的 GET 请求,应返回错误信息。

    1curl http://localhost:3000/users/abc

    预期响应:

    1Invalid user ID: abc

点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试包含和不包含可选参数的路由。

  1. 获取某本书的所有评论(无 review ID): 向仅包含 bookId 的路由发送 GET 请求,返回所有评论的通用消息。

    1curl http://localhost:3000/books/101/reviews

    预期响应:

    1Book ID: 101 - No specific review requested
  2. 获取某本书的特定评论: 向同时包含 bookId 和 reviewId 的路由发送 GET 请求,返回与该评论相关的具体消息。

    1curl http://localhost:3000/books/101/reviews/5

    预期响应:

    1Review ID: 5 for Book ID: 101

解决方案

更新 server.js 文件如下:

1const express = require('express'); 2const app = express(); 3 4// 获取某本书的评论,可选择获取特定评论 5app.get('/books/:bookId/reviews/:reviewId?', (req, res) => { 6 const { bookId, reviewId } = req.params; 7 8 if (reviewId) { 9 res.send(`Review ID: ${reviewId} for Book ID: ${bookId}`); 10 } else { 11 res.send(`Book ID: ${bookId} - No specific review requested`); 12 } 13}); 14 15app.listen(3000, () => { 16 console.log('Server is running on port 3000'); 17});

说明:

  • 第 5 行: 定义了一个包含两个动态段的路由::bookId 和 :reviewId?。其中 ? 表示 reviewId 是可选参数。
  • 第 6 行: 从 req.params 中提取路由参数 bookId 和 reviewId。
  • 第 8–12 行: 判断 reviewId 是否存在,并据此返回相应的响应内容。

结论

Express 路由器与模块化路由