# 查询字符串与表单数据

URL: https://caijiao.org/express/chapter3/3-query-body
Source: docs/express/chapter3/3-query-body.md
Description: 本章节介绍如何在 Express 中获取查询字符串参数和处理表单数据，包括使用内置中间件解析 URL 查询和请求体。

在 Web 开发中，客户端经常通过查询字符串和表单提交数据。Express 提供简单方式来访问这些数据。

## 查询字符串参数

查询字符串位于 URL 问号 `?` 后，多个参数用 `&` 分隔。通过 `req.query` 对象访问。

示例 URL：

```text
/search?keyword=express\&page=2
````

示例代码：

```js
app.get('/search', (req, res) => {
  const { keyword, page } = req.query;
  res.send(`关键词：${keyword}，页码：${page}`);
});
````

## 处理表单数据

表单提交通常使用 `application/x-www-form-urlencoded` 或 `application/json` 格式。Express 4.16+ 内置了两个中间件用于解析请求体：

* `express.urlencoded()` 解析 URL 编码的表单数据
* `express.json()` 解析 JSON 格式请求体

### 使用示例

```js
const express = require('express');
const app = express();

// 解析表单数据（application/x-www-form-urlencoded）
app.use(express.urlencoded({ extended: true }));

// 解析 JSON 数据
app.use(express.json());

app.post('/submit', (req, res) => {
  console.log(req.body);  // 表单数据或 JSON 对象
  res.send('数据已接收');
});
```

### HTML 表单示例

```html
<form action="/submit" method="POST">
  <input type="text" name="username" />
  <input type="password" name="password" />
  <button type="submit">提交</button>
</form>
```

提交后，服务器端可以通过 `req.body.username` 和 `req.body.password` 获取对应数据。

## 总结

掌握查询字符串和表单数据的获取是 Express 接收客户端输入的基础，结合中间件解析请求体可以轻松处理各种请求数据。
