在本章中,我们将深入探讨 Express 的路由机制,包括参数化路由、嵌套路由、路由前缀、路由分组和路由的高级用法。通过这些知识,读者将能够构建复杂的路由系统,以便处理各种类型的 HTTP 请求。
1 参数化路由
参数化路由允许你在 URL 中定义动态部分,可以在请求处理函数中访问这些动态部分。参数通过冒号 :
定义。
示例:
app.get('/user/:id', (req, res) => {// 获取路由参数 idconst userId = req.params.id;res.send(`User ID: ${userId}`);
});
当用户访问 /user/123
时,响应内容将为 “User ID: 123”。
代码详解:
req.params
:访问路由参数,返回一个对象,其中包含所有参数。
2 嵌套路由
嵌套路由用于组织和管理相关的路由,使代码更具可读性和可维护性。可以使用 express.Router
创建嵌套路由。
示例:
const express = require('express');
const app = express();
const router = express.Router();// 定义用户相关的嵌套路由
router.get('/profile', (req, res) => {res.send('User profile page');
});router.get('/settings', (req, res) => {res.send('User settings page');
});// 将嵌套路由挂载到应用中
app.use('/user', router);// 启动服务器
const port = 3000;
app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);
});
当用户访问 /user/profile
或 /user/settings
时,将分别看到 “User profile page” 和 “User settings page”。
代码详解:
express.Router()
:创建一个新的路由器实例。router.get('/path', callback)
:定义嵌套路由。app.use('/prefix', router)
:将嵌套路由挂载到应用中,所有嵌套路由都将以/prefix
开头。
3 路由前缀
路由前缀允许你为一组路由定义共同的前缀,使得这些路由具有相同的 URL 基础路径。这在模块化开发中非常有用。前缀和嵌套实际上是一套用法,只是应用的场景,看待问题的角度不一致。
示例:
const express = require('express');
const app = express();
const adminRouter = express.Router();// 定义管理员相关的路由
adminRouter.get('/dashboard', (req, res) => {res.send('Admin dashboard');
});adminRouter.get('/settings', (req, res) => {res.send('Admin settings');
});// 将路由前缀为 /admin 的路由器挂载到应用中
app.use('/admin', adminRouter);// 启动服务器
const port = 3000;
app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);
});
当用户访问 /admin/dashboard
或 /admin/settings
时,将分别看到 “Admin dashboard” 和 “Admin settings”。
代码详解:
app.use('/prefix', router)
:将路由器挂载到应用中,并为路由器内的所有路由添加共同的前缀。