动态路由与路由参数
学习如何在 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 参数的路由。
-
包含
id参数: 向/users/123发送一条GET请求。1curl http://localhost:3000/users/123预期响应:
1User ID: 123 -
不包含
id参数: 向/users发送一条GET请求(未提供 ID)。1curl http://localhost:3000/users预期响应:
1User ID is not provided.
点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试有效和无效的 id 值。
-
有效的数字 ID: 发送一个带有数值型
id的GET请求,应返回 "User ID:<id>"。1curl http://localhost:3000/users/42预期响应:
1User ID: 42 -
无效的非数字 ID: 发送一个带有非数值型
id的GET请求,应返回错误信息。1curl http://localhost:3000/users/abc预期响应:
1Invalid user ID: abc
点击“Run”按钮启动服务器,然后点击“+”标签页打开一个新终端。使用以下 curl 命令测试包含和不包含可选参数的路由。
-
获取某本书的所有评论(无 review ID): 向仅包含
bookId的路由发送GET请求,返回所有评论的通用消息。1curl http://localhost:3000/books/101/reviews预期响应:
1Book ID: 101 - No specific review requested -
获取某本书的特定评论: 向同时包含
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是否存在,并据此返回相应的响应内容。