在本章中,我们将详细探讨如何在 Express 中处理 HTTP 请求与响应。这包括解析请求数据、设置响应数据、处理表单数据、使用查询参数等。理解这些内容是开发高效和功能丰富的 Web 应用程序的基础。
1 解析请求数据
在 Express 中,可以通过 req
对象访问 HTTP 请求的各个部分。常见的请求数据包括请求头、查询参数、请求体等。
1.1 请求头
请求头包含关于请求的信息,例如客户端的信息、请求的类型等。可以通过 req.headers
或 req.get
方法访问请求头。
示例:
app.get('/headers', (req, res) => {
// 获取所有请求头
const headers = req.headers;
res.json(headers);
});
app.get('/user-agent', (req, res) => {
// 获取特定的请求头
const userAgent = req.get('User-Agent');
res.send(`User-Agent: ${userAgent}`);
});
代码详解:
req.headers
:获取所有请求头,返回一个对象。req.get('Header-Name')
:获取特定的请求头。
1.2 查询参数
查询参数是 URL 中的键值对,可以通过 req.query
访问。
示例:
app.get('/search', (req, res) => {
// 获取查询参数
const query = req.query;
res.json(query);
});
当用户访问 /search?term=express&sort=desc
时,响应内容将为 {"term":"express","sort":"desc"}
。
代码详解:
req.query
:获取查询参数,返回一个对象。
1.3 路由参数
在路由路径中定义的参数可以通过 req.params
访问。
示例:
app.get('/users/:id', (req, res) => {
// 获取路由参数
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
当用户访问 /users/123
时,响应内容将为 “User ID: 123”。
代码详解:
req.params
:获取路由参数,返回一个对象。
1.4 请求体
请求体包含客户端发送的内容,通常用于 POST、PUT 等请求方法。在 Express 中,可以使用中间件解析请求体,如 express.json()
和 express.urlencoded()
。
解析 JSON 请求体:
app.use(express.json());
app.post('/json', (req, res) => {
// 获取 JSON 请求体
const data = req.body;
res.json(data);
});
解析 URL 编码的请求体:
app.use(express.urlencoded({ extended: true }));
app.post('/form', (req, res) => {
// 获取表单请求体
const data = req.body;
res.json(data);
});
代码详解:
express.json()
:解析 JSON 请求体,将结果存储在req.body
。express.urlencoded({ extended: true })
:解析 URL 编码的请求体,将结果存储在req.body
。