You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express框架中解析多种MIME类型请求体的规范实现方法

Express 多MIME类型请求体解析方案

核心结论

不需要从零编写自定义body parser,基于Express内置中间件配合对应格式的解析库即可实现需求;Express内置的json中间件仅会处理匹配application/json的请求,不会消费其他MIME类型的请求流,非JSON类型的原始请求体可以正常获取。

具体实现步骤

  1. 首先安装YAML解析依赖
npm install js-yaml
  1. 调整Express中间件配置,新增YAML解析逻辑
const express = require('express')
const yaml = require('js-yaml')
const app = express()

// 保留原有JSON解析能力,仅处理application/json类型请求
// 若需要留存JSON请求的原始体,可开启verify配置
app.use(express.json({
  // verify: (req, res, buf) => req.rawBody = buf
}))

// 针对application/yaml类型的请求,先读取原始文本内容
app.use(express.text({ type: 'application/yaml' }))

// 解析YAML文本为对象
app.use((req, res, next) => {
  if (req.get('content-type') !== 'application/yaml') return next()
  try {
    req.body = yaml.load(req.body)
    next()
  } catch (err) {
    return res.status(400).json({ error: 'YAML格式不合法' })
  }
})

app.post('/test', (req, res) => {
  res.status(200).json(req.body)
})

app.listen(3000)

实现说明

  • Express内置的express.json()中间件默认仅对Content-Type为application/json的请求做流读取和解析,其他类型的请求会直接跳过,不会占用原始请求流,因此YAML类型的请求可以正常读取原始内容
  • 上述实现同时兼容你提到的两类请求:application/json类型会走原有JSON解析逻辑,application/yaml类型会走自定义YAML解析逻辑,路由侧无需做额外判断即可直接使用req.body
  • 如果需要适配更多MIME类型(比如XML、CSV等),都可以按照相同逻辑,配合对应格式的解析库快速实现,不需要从零处理流读取、编码兼容等底层逻辑

内容的提问来源于stack exchange,提问作者Balázs Édes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:04