在 Express 应用中,当客户端发送 JSON 格式的请求体时,通常使用哪种中间件来解析该请求体?请说明其用法及相关的配置选项。
考察说明
考查对 Express 内置中间件 express.json() 的掌握程度,包括解析原理、使用场景和配置方法。
回答思路
- 【回答框架 1】Express 处理 JSON 请求体的标准方式是使用内置中间件 express.json(),它基于 body-parser 实现,用于解析 Content-Type 为 application/json 的请求体,并将解析后的数据挂载到 req.body 上。
- 【回答框架 2】使用方式:在路由之前全局调用 app.use(express.json()),即可对所有请求生效;也可在单个路由中作为局部中间件传入,如 app.post('/api', express.json(), handler)。该中间件会读取请求流,按 JSON 语法解析,并把结果对象赋值给 req.body。
- 【回答框架 3】配置选项:express.json() 接受一个可选配置对象,常用选项包括 limit(限制请求体大小,默认 100kb,超出返回 413)、type(指定要解析的 Content-Type,默认 'application/json',支持字符串或函数)、strict(仅解析对象和数组,设为 false 可接受任意 JSON 类型)、verify(自定义校验函数)等。
- 【回答框架 4】注意:express.json() 只解析 JSON 格式的请求体,若请求 Content-Type 不匹配,则跳过解析,此时 req.body 为 undefined(在较新版本中可能为 {}),需自行处理非 JSON 请求。
- 【回答框架 5】对于 Express 4.x 及以下版本,express.json() 存在但可能依赖 body-parser;在 Express 5 中已成为内置中间件。实际开发中建议使用默认配置,并根据业务调整 limit 以避免请求体过大。
- 【关键点 1】express.json() 是 Express 内置中间件,专门解析 JSON 请求体。
- 【关键点 2】使用 app.use(express.json()) 全局启用,或作为局部中间件。
- 【关键点 3】常用配置 limit 控制请求体大小,默认 100kb。
- 【关键点 4】解析结果挂载在 req.body 上,供后续路由使用。
- 【关键点 5】Content-Type 不匹配时不会解析,应检查请求头。
- 【易错点 1】未启用中间件时,req.body 为 undefined,直接访问会报错。
- 【易错点 2】limit 设置过小会导致大 JSON 请求被拒绝,应结合实际业务调整。
- 【易错点 3】混淆 express.json() 和 express.urlencoded(),后者用于表单数据,前者用于 JSON。