ExpressJS - 路由
Express.js - 可扩展的路由
Section titled “Express.js - 可扩展的路由”路由(Routing)是指应用程序如何响应客户端对特定端点(endpoint)的请求,该端点由一个 URI(或路径)和一个特定的 HTTP 请求方法(例如 GET、POST 等)组成。
Express 中路由的基本结构是:
app.METHOD(PATH, HANDLER)app是一个 Express 实例。METHOD是小写的 HTTP 请求方法(例如get、post)。PATH是服务器上的路径。HANDLER是当路由匹配时执行的函数。
示例:基本路由
Section titled “示例:基本路由”import express from 'express';const app = express();
// 响应根 URL 的 GET 请求app.get('/', (req, res) => { res.send('Welcome to the homepage!');});
// 响应 '/api/users' 的 POST 请求app.post('/api/users', (req, res) => { res.send('New user created!');});
app.listen(3000);路由参数(Route parameters)是 URL 中用于捕获特定位置值的命名片段。捕获到的值会填充到 req.params 对象中。
// 路由路径:/users/:userId/books/:bookId// 请求 URL:http://localhost:3000/users/101/books/42// req.params 将是:{ "userId": "101", "bookId": "42" }
app.get('/users/:userId/books/:bookId', (req, res) => { const { userId, bookId } = req.params; res.send(`Fetching book with ID ${bookId} for user with ID ${userId}.`);});使用 express.Router 进行扩展
Section titled “使用 express.Router 进行扩展”随着应用程序的增长,将所有路由定义在一个文件中会变得难以管理。express.Router 是一个迷你 Express 应用程序,它允许您对路由处理器(route handlers)和中间件(middleware)进行分组,从而使您的代码保持模块化和有组织。
现代路由项目结构
Section titled “现代路由项目结构”一种常见做法是将路由分离到 routes 目录下的独立文件中。
my-app/├── src/│ ├── routes/│ │ ├── users.routes.js│ │ └── products.routes.js│ └── app.js # Main app file└── package.json示例:创建用户路由
Section titled “示例:创建用户路由”首先,在 src/routes/users.routes.js 文件中定义用户相关的路由。
import express from 'express';
const router = express.Router();
// 注意:这里的路径是相对于 app.js 中定义的路径
// GET /api/users/router.get('/', (req, res) => { res.json({ message: 'List of all users' });});
// POST /api/users/router.post('/', (req, res) => { res.status(201).json({ message: 'User created' });});
// GET /api/users/:idrouter.get('/:id', (req, res) => { res.json({ message: `Details for user ${req.params.id}` });});
// 重要:导出路由export default router;在主应用程序中挂载路由
Section titled “在主应用程序中挂载路由”接下来,在主应用程序文件 src/app.js 中导入并 use 这个路由。
import express from 'express';import usersRouter from './routes/users.routes.js';// import productsRouter from './routes/products.routes.js'; // 你可以在这里添加其他路由
const app = express();const PORT = 3000;
app.use(express.json()); // 用于解析 JSON 的中间件
// 挂载路由// usersRouter 中的所有路由都将以 '/api/users' 为前缀app.use('/api/users', usersRouter);// app.use('/api/products', productsRouter);
app.get('/', (req, res) => { res.send('API is running...');});
app.listen(PORT, () => { console.log(`Server listening on port ${PORT}`);});使用 express.Router 的好处
Section titled “使用 express.Router 的好处”- 模块化: 将相关路由保持在一起,使代码更易于理解和查找。
- 可维护性: 对用户相关端点的更改只需修改
users.routes.js文件。 - 可重用性: 您可以将中间件专门应用于一个路由,然后它将应用于该路由中定义的所有路由。
通过使用 express.Router,您可以为 Express 应用程序创建一个清晰、可扩展且专业的结构,这对于任何超越简单演示的项目都至关重要。