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

Express中Form-Data请求req.body为空,JSON请求正常的问题

解决Express无法解析Form-Data导致req.body为空的问题

问题根源是你当前用的express.json()和express.urlencoded()中间件只能处理JSON格式和application/x-www-form-urlencoded格式的请求,完全不支持multipart/form-data(也就是你用的Form-Data),所以这类请求的参数根本没被解析到req.body里。

解决步骤:

  1. 安装multer依赖
    multer是Express官方推荐的解析multipart/form-data的中间件,执行命令安装:
npm install multer
  1. 在app.js中配置并使用multer
    根据需求分两种场景:
  • 仅解析Form-Data里的文本字段(不需要上传文件):
    在app.js中引入multer,添加对应中间件(要放在路由注册前):
// 在app.js顶部新增
const multer = require('multer');

// 在express.urlencoded之后添加这一行
app.use(multer().none()); // .none()表示只处理文本字段,不解析文件
  • 需要支持文件上传:
    可以配置multer的存储路径,自定义文件名:
const multer = require('multer');
// 配置文件存储位置和命名规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/uploads') // 确保项目下存在uploads文件夹
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
});
const upload = multer({ storage: storage });

// 全局使用(所有路由都支持Form-Data)
app.use(upload.any()); 
// 或针对单个路由使用,比如注册接口:
// userRouter.route("/register").post(upload.any(), registerUser);
  1. 修改后的app.js关键代码示例
const express = require("express");
const cors = require("cors");
const path = require("path");
const cookie = require("cookie-parser");
const session = require("express-session");
const MongoStore = require("connect-mongo");
const passport = require("passport");
const multer = require('multer'); // 新增
const dbName = require("./constants.js").DB_Name;

const app = express();

app.use(
  cors({
    origin: process.env.CORS_ORIGIN,
    credentials: true,
  })
);
app.use(express.json());
app.use(express.urlencoded({ extended: true, limit: "16kb" }));
app.use(multer().none()); // 新增:解析Form-Data文本字段
app.use(require("morgan")("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(cookie());

// ... 其余session、passport配置保持不变 ...

const { userRouter } = require("./router/user.routes.js");
app.use("/api/v1/auth", userRouter);

module.exports.app = app;
  1. 测试验证
    重启Express服务后,用Postman发送Form-Data格式请求到/api/v1/auth/success,控制台打印的req.body就能正常显示你提交的参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:20