一、什么是路由?
简单来说,路由就是根据客户端请求的 URL 和 HTTP 方法(例如 GET、POST、PUT、DELETE),将请求导向特定的处理函数(也称为路由处理程序或中间件)。
二、Express 路由的基本结构
在 Express 中,路由的基本结构如下:
javascript
app.METHOD(PATH, HANDLER)
app
: Express 应用实例。METHOD
: HTTP 请求方法,例如get
、post
、put
、delete
等。PATH
: 请求的 URL 路径,例如/users
、/products/:id
等。HANDLER
: 处理请求的函数,它接收req
(请求对象) 和res
(响应对象) 作为参数。
示例:一个简单的 GET 路由
javascript
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
在这个例子中,当客户端向服务器的根路径 (/
) 发送 GET 请求时,服务器会执行 (req, res) => { res.send('Hello World!'); }
这个处理函数,并向客户端发送 "Hello World!"。
三、常用的 HTTP 方法
Express 支持所有标准的 HTTP 方法,以下是一些常用的方法:
GET
: 用于获取资源。POST
: 用于创建新资源。PUT
: 用于更新现有资源(通常是替换整个资源)。PATCH
: 用于更新现有资源(通常是部分更新)。DELETE
: 用于删除资源。
四、高阶路由技巧
1.路由参数
Express 允许你在路由路径中使用参数(动态路由),以便从 URL 中提取数据。
javascript
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
在这个例子中,:id
是一个路由参数。当客户端访问 /users/123
时,req.params.id
的值将是 "123"。
2.链式路由
精简同类路径代码
javascript
app.route('/api/products')
.get((req, res) => { /* 获取产品列表 */ })
.post((req, res) => { /* 创建新产品 */ });
3.正则表达式路由
匹配复杂URL模式
javascript
// 匹配数字ID的路由
app.get(/^/users/(\d+)$/, (req, res) => {
const userId = req.params[0]; // 通过数组访问捕获组
});
4.使用 express.Router
模块化路由
当你的应用变得越来越复杂时,将所有路由都放在一个文件中会变得难以维护。express.Router
允许你将路由组织成模块化的组件。
javascript
// users.js 定义路由
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('List of users');
});
router.get('/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
module.exports = router;
// app.js
const express = require('express');
const app = express();
const users = require('./users');
// 中间件指定路由,即装载路由
app.use('/users', users);
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
在这个例子中,我们将用户相关的路由放在 users.js
文件中,并使用 express.Router
创建了一个路由模块。然后在 app.js
中,我们使用 app.use('/users', users)
将该路由模块挂载到 /users
路径下。
五、总结
Express 路由是构建 Web 应用和 API 的基石。通过理解路由的基本概念和用法,你可以构建清晰、高效、易于维护的应用程序。掌握路由参数和 express.Router
,可以让你更好地组织和管理你的代码。