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

如何在Express.js中获取POST请求体对应的Buffer对象

获取Express请求体Buffer对象的实现方案

Express 内置的常规 body 解析中间件(express.json()、express.urlencoded())仅针对特定内容类型解析,默认不会输出原始 Buffer 格式的请求体,你可以通过以下两种方式实现需求,适配任意内容类型、二进制数据的请求场景:

首先需要修正你代码里的路由方法问题:GET 规范下不携带请求体,处理 POST 类带请求体的请求请使用app.post()或app.all()注册路由。


方案1:使用内置中间件(Express 4.16+ 推荐,零额外依赖)

Express 4.16 及以上版本自带express.raw()中间件,原生支持将请求体解析为 Buffer 对象,只需要修改匹配规则覆盖所有内容类型即可:

import express from "express";

const app = express();

// 配置raw解析器,匹配所有Content-Type,可自行调整limit参数设置最大请求体大小
app.use(express.raw({ type: "*/*", limit: "50mb" }));

app.post("/", (req, res) => {
  // 此处req.body即为Buffer类型
  console.log(Buffer.isBuffer(req.body)); // 输出true
  // 直接对req.body做业务处理即可
  res.send(`已接收请求体,Buffer长度:${req.body.length}`);
});

app.listen(3000);

方案2:自定义解析中间件(兼容所有Express版本,完全可控)

如果你的Express版本较低,或者需要更灵活的解析逻辑,可以直接监听请求流自行拼接Buffer,不需要引入任何第三方包:

import express from "express";

const app = express();

// 自定义原始请求体解析中间件
app.use((req, res, next) => {
  // GET/HEAD请求默认无请求体,直接返回空Buffer
  if (["GET", "HEAD"].includes(req.method)) {
    req.body = Buffer.alloc(0);
    return next();
  }
  const chunks = [];
  req.on("data", (chunk) => chunks.push(chunk));
  req.on("end", () => {
    req.body = Buffer.concat(chunks);
    next();
  });
  req.on("error", (err) => next(err));
});

app.post("/", (req, res) => {
  // 此处req.body即为Buffer类型
  console.log(Buffer.isBuffer(req.body)); // 输出true
  // 业务处理逻辑
  res.send(`已接收请求体,Buffer长度:${req.body.length}`);
});

app.listen(3000);

注意事项:不要在上述Buffer解析中间件之前注册express.json()、express.urlencoded()、multer等会消费请求流的其他body解析中间件,否则请求流会被提前读取,无法拿到完整的原始Buffer数据。

内容的提问来源于stack exchange,提问作者c136

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:06:09