基本概念:
在 Express 中,请求对象(Request Object) 和 响应对象(Response Object) 是两个核心对象,分别用于处理客户端发送的请求和向客户端返回响应。它们提供了丰富的属性和方法,用于访问请求数据、设置响应内容以及控制请求-响应周期。
1. 请求对象(Request Object)
请求对象(通常命名为 req)表示 HTTP 请求,包含了客户端发送的所有信息。以下是 req 的重要属性和方法:
属性
-
req.params- 包含路由参数(URL 中的动态部分)。
- 场景:获取 URL 中的动态值,如
/users/:id中的id。 - 示例:
app.get('/users/:id', (req, res) => { const userId = req.params.id; // 获取 URL 中的 id res.send(`User ID: ${userId}`); });
-
req.query- 包含 URL 查询参数(即
?后面的键值对)。 - 场景:获取查询字符串中的数据。
- 示例:
app.get('/search', (req, res) => { const query = req.query.q; // 获取查询参数 q res.send(`Search query: ${query}`); });
- 包含 URL 查询参数(即
-
req.body- 包含请求体中的数据(通常用于 POST、PUT 请求)。
- 场景:获取表单数据或 JSON 数据。
- 注意:需要配合中间件(如
express.json()或express.urlencoded())解析请求体。 - 示例:
app.use(express.json()); // 解析 JSON 请求体 app.post('/users', (req, res) => { const userData = req.body; // 获取请求体中的数据 res.send(`User data: ${JSON.stringify(userData)}`); });
-
req.headers- 包含请求头信息。
- 场景:获取请求头中的特定信息(如
Authorization、Content-Type等)。 - 示例:
app.get('/headers', (req, res) => { const userAgent = req.headers['user-agent']; // 获取 User-Agent 头 res.send(`User-Agent: ${userAgent}`); });
-
req.cookies- 包含客户端发送的 cookies。
- 场景:获取客户端存储的 cookies。
- 注意:需要配合
cookie-parser中间件使用。 - 示例:
const cookieParser = require('cookie-parser'); app.use(cookieParser()); app.get('/cookies', (req, res) => { const cookies = req.cookies; // 获取所有 cookies res.send(`Cookies: ${JSON.stringify(cookies)}`); });
-
req.ip- 包含客户端的 IP 地址。
- 场景:记录客户端 IP 或进行 IP 限制。
- 示例:
app.get('/ip', (req, res) => { const clientIp = req.ip; // 获取客户端 IP res.send(`Your IP: ${clientIp}`); });
-
req.method- 包含请求的 HTTP 方法(如 GET、POST 等)。
- 场景:根据请求方法执行不同的逻辑。
- 示例:
app.use((req, res, next) => { console.log(`Request method: ${req.method}`); next(); });
-
req.path- 包含请求的 URL 路径。
- 场景:记录请求路径或进行路径匹配。
- 示例:
app.get('/path', (req, res) => { const path = req.path; // 获取请求路径 res.send(`Request path: ${path}`); });
2. 响应对象(Response Object)
响应对象(通常命名为 res)用于向客户端发送响应。以下是 res 的重要属性和方法:
属性
-
res.statusCode- 设置或获取响应的状态码。
- 场景:手动设置 HTTP 状态码。
- 示例:
app.get('/status', (req, res) => { res.statusCode = 404; // 设置状态码为 404 res.send('Not Found'); });
-
res.headersSent- 检查响应头是否已经发送。
- 场景:避免重复发送响应头。
- 示例:
app.get('/check-headers', (req, res) => { if (!res.headersSent) { res.set('Content-Type', 'text/plain'); } res.send('Headers checked'); });
方法
-
res.send()- 发送 HTTP 响应,支持字符串、对象、数组等。
- 场景:返回文本、JSON 数据等。
- 示例:
app.get('/send', (req, res) => { res.send('Hello, World!'); // 发送文本 // res.send({ message: 'Hello' }); // 发送 JSON });
-
res.json()- 发送 JSON 格式的响应。
- 场景:返回 JSON 数据。
- 示例:
app.get('/json', (req, res) => { res.json({ message: 'Hello, JSON!' }); });
-
res.status()- 设置 HTTP 状态码。
- 场景:返回特定的状态码。
- 示例:
app.get('/not-found', (req, res) => { res.status(404).send('Not Found'); });
-
res.set()/res.header()- 设置响应头。
- 场景:自定义响应头。
- 示例:
app.get('/set-header', (req, res) => { res.set('Content-Type', 'text/plain'); res.send('Header set'); });
-
res.redirect()- 重定向到指定的 URL。
- 场景:页面跳转。
- 示例:
app.get('/redirect', (req, res) => { res.redirect('/new-location'); });
-
res.cookie()- 设置 cookie。
- 场景:存储客户端数据。
- 示例:
app.get('/set-cookie', (req, res) => { res.cookie('username', 'john', { maxAge: 900000 }); res.send('Cookie set'); });
-
res.clearCookie()- 清除指定的 cookie。
- 场景:删除客户端存储的 cookie。
- 示例:
app.get('/clear-cookie', (req, res) => { res.clearCookie('username'); res.send('Cookie cleared'); });
-
res.end()- 结束响应过程。
- 场景:快速结束响应,不发送数据。
- 示例:
app.get('/end', (req, res) => { res.end(); // 结束响应 });
总结
- 请求对象(
req) 用于获取客户端发送的数据,如 URL 参数、查询参数、请求体、请求头等。 - 响应对象(
res) 用于向客户端发送响应,如设置状态码、发送数据、设置响应头、重定向等。