Express 中“请求对象”(Request Object)和“响应对象”(Response Object)包含哪些重要的属性和方法,分别用于什么场景?

307 阅读3分钟

基本概念:

在 Express 中,请求对象(Request Object)响应对象(Response Object) 是两个核心对象,分别用于处理客户端发送的请求和向客户端返回响应。它们提供了丰富的属性和方法,用于访问请求数据、设置响应内容以及控制请求-响应周期。

1. 请求对象(Request Object)

请求对象(通常命名为 req)表示 HTTP 请求,包含了客户端发送的所有信息。以下是 req 的重要属性和方法:

属性

  1. 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}`);
      });
      
  2. req.query

    • 包含 URL 查询参数(即 ? 后面的键值对)。
    • 场景:获取查询字符串中的数据。
    • 示例:
      app.get('/search', (req, res) => {
          const query = req.query.q; // 获取查询参数 q
          res.send(`Search query: ${query}`);
      });
      
  3. 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)}`);
      });
      
  4. req.headers

    • 包含请求头信息。
    • 场景:获取请求头中的特定信息(如 AuthorizationContent-Type 等)。
    • 示例:
      app.get('/headers', (req, res) => {
          const userAgent = req.headers['user-agent']; // 获取 User-Agent 头
          res.send(`User-Agent: ${userAgent}`);
      });
      
  5. 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)}`);
      });
      
  6. req.ip

    • 包含客户端的 IP 地址。
    • 场景:记录客户端 IP 或进行 IP 限制。
    • 示例:
      app.get('/ip', (req, res) => {
          const clientIp = req.ip; // 获取客户端 IP
          res.send(`Your IP: ${clientIp}`);
      });
      
  7. req.method

    • 包含请求的 HTTP 方法(如 GET、POST 等)。
    • 场景:根据请求方法执行不同的逻辑。
    • 示例:
      app.use((req, res, next) => {
          console.log(`Request method: ${req.method}`);
          next();
      });
      
  8. req.path

    • 包含请求的 URL 路径。
    • 场景:记录请求路径或进行路径匹配。
    • 示例:
      app.get('/path', (req, res) => {
          const path = req.path; // 获取请求路径
          res.send(`Request path: ${path}`);
      });
      

2. 响应对象(Response Object)

响应对象(通常命名为 res)用于向客户端发送响应。以下是 res 的重要属性和方法:

属性

  1. res.statusCode

    • 设置或获取响应的状态码。
    • 场景:手动设置 HTTP 状态码。
    • 示例:
      app.get('/status', (req, res) => {
          res.statusCode = 404; // 设置状态码为 404
          res.send('Not Found');
      });
      
  2. res.headersSent

    • 检查响应头是否已经发送。
    • 场景:避免重复发送响应头。
    • 示例:
      app.get('/check-headers', (req, res) => {
          if (!res.headersSent) {
              res.set('Content-Type', 'text/plain');
          }
          res.send('Headers checked');
      });
      

方法

  1. res.send()

    • 发送 HTTP 响应,支持字符串、对象、数组等。
    • 场景:返回文本、JSON 数据等。
    • 示例:
      app.get('/send', (req, res) => {
          res.send('Hello, World!'); // 发送文本
          // res.send({ message: 'Hello' }); // 发送 JSON
      });
      
  2. res.json()

    • 发送 JSON 格式的响应。
    • 场景:返回 JSON 数据。
    • 示例:
      app.get('/json', (req, res) => {
          res.json({ message: 'Hello, JSON!' });
      });
      
  3. res.status()

    • 设置 HTTP 状态码。
    • 场景:返回特定的状态码。
    • 示例:
      app.get('/not-found', (req, res) => {
          res.status(404).send('Not Found');
      });
      
  4. res.set() / res.header()

    • 设置响应头。
    • 场景:自定义响应头。
    • 示例:
      app.get('/set-header', (req, res) => {
          res.set('Content-Type', 'text/plain');
          res.send('Header set');
      });
      
  5. res.redirect()

    • 重定向到指定的 URL。
    • 场景:页面跳转。
    • 示例:
      app.get('/redirect', (req, res) => {
          res.redirect('/new-location');
      });
      
  6. res.cookie()

    • 设置 cookie。
    • 场景:存储客户端数据。
    • 示例:
      app.get('/set-cookie', (req, res) => {
          res.cookie('username', 'john', { maxAge: 900000 });
          res.send('Cookie set');
      });
      
  7. res.clearCookie()

    • 清除指定的 cookie。
    • 场景:删除客户端存储的 cookie。
    • 示例:
      app.get('/clear-cookie', (req, res) => {
          res.clearCookie('username');
          res.send('Cookie cleared');
      });
      
  8. res.end()

    • 结束响应过程。
    • 场景:快速结束响应,不发送数据。
    • 示例:
      app.get('/end', (req, res) => {
          res.end(); // 结束响应
      });
      

总结

  • 请求对象(req 用于获取客户端发送的数据,如 URL 参数、查询参数、请求体、请求头等。
  • 响应对象(res 用于向客户端发送响应,如设置状态码、发送数据、设置响应头、重定向等。