# 路由模块化

URL: https://caijiao.org/express/chapter3/4-router-modules
Source: docs/express/chapter3/4-router-modules.md
Description: 本章节介绍如何使用 Express 的路由模块化机制，将路由按功能划分为独立模块，提高代码的可维护性和可扩展性。

当应用规模增大，所有路由写在一个文件中将导致代码混乱。Express 提供了模块化路由的方式，将路由拆分为独立模块，有助于项目结构清晰、职责明确。

## 使用 express.Router 创建路由模块

`express.Router()` 是创建模块化、可挂载路由处理程序的类。

### 示例：用户路由模块

创建 `routes/user.js` 文件：

```js
const express = require('express');
const router = express.Router();

// 获取用户列表
router.get('/', (req, res) => {
  res.send('用户列表');
});

// 获取指定用户
router.get('/:id', (req, res) => {
  res.send(`用户ID：${req.params.id}`);
});

module.exports = router;
````

## 在主应用中挂载路由模块

在 `app.js` 或主文件中引入并使用路由模块：

```js
const express = require('express');
const app = express();

// 引入路由模块
const userRouter = require('./routes/user');

// 挂载到 /user 路径
app.use('/user', userRouter);

app.listen(3000, () => {
  console.log('服务器已启动，端口 3000');
});
```

访问路径示例：

* `/user/` → 用户列表
* `/user/123` → 获取 ID 为 123 的用户

## 支持多级模块化结构

可以根据功能划分多个路由文件：

```text
routes/
  ├── user.js
  ├── product.js
  └── order.js
```

分别挂载到对应路径：

```js
app.use('/user', require('./routes/user'));
app.use('/product', require('./routes/product'));
app.use('/order', require('./routes/order'));
```

## 路由模块中间件支持

模块路由也可以使用中间件：

```js
router.use((req, res, next) => {
  console.log('用户路由时间：', Date.now());
  next();
});
```

## 总结

路由模块化是构建大型 Express 应用的重要技巧，能够提升代码结构的清晰度，降低耦合度，让项目更易维护和扩展。
