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

Node.js/Express接口报错req.body为undefined无法解构title属性

Express 接口req.body为undefined报错排查方案

这个报错的核心触发原因是请求到达控制器逻辑时,JSON格式的请求体还没被解析,即便你写了app.use(express.json()),90%以上的情况是以下几个配置错误导致的,按出现概率排序排查即可:

1. 中间件/路由加载顺序错误(最高发)

Express 中间件严格按照代码书写的先后顺序执行,如果你把视频路由的挂载逻辑写在了express.json()中间件注册之前,请求匹配到路由时,JSON解析逻辑根本没执行,req.body会保持默认的undefined值。
正确的Server.ts加载顺序参考:

import express from 'express';
import mongoose from 'mongoose';
import videoRoutes from './routes/Video';

const app = express();
const PORT = 3000;

// 【必须先注册解析中间件,再挂载路由】
app.use(express.json());
// 跨域、日志等其他全局中间件也统一放在路由挂载前注册

// 路由挂载必须放在所有解析类中间件的后面
app.use('/api/videos', videoRoutes);

// 数据库连接、服务启动逻辑放后面即可
mongoose.connect('你的MongoDB连接地址')
  .then(() => console.log('数据库连接成功'))
  .catch(err => console.error('数据库连接失败', err));

app.listen(PORT, () => {
  console.log(`服务已启动,端口:${PORT}`);
});

2. Thunder Client请求配置错误

express.json()只会解析请求头Content-Type为application/json的请求体,请求端配置错误也会导致解析失败,逐项检查:

  • 打开请求编辑页的Headers标签,确认存在Content-Type: application/json配置,不存在就手动添加
  • 打开Body标签,选中JSON格式选项,不要选form-data、x-www-form-urlencoded、text等其他格式
  • 提交的视频数据要写为标准JSON格式,参考样例:
{
  "title": "面试项目测试视频",
  "description": "面向登录用户展示的测试视频内容",
  "videoUrl": "https://res.example.com/demo.mp4",
  "coverUrl": "https://res.example.com/cover.jpg"
}

3. 其他冲突配置排查

  • 如果你额外安装了body-parser包并注册了其他解析规则,会和Express内置的JSON解析冲突,Express 4.16.0及以上版本完全内置了JSON解析能力,不需要额外引入body-parser相关依赖,把多余的解析中间件删掉即可
  • 不要在单个POST路由上单独注册express.raw()、express.text()等其他解析中间件,会覆盖全局的JSON解析规则

快速验证方法

在视频控制器的最开头加一行调试代码:

const createVideo = async (req: Request, res: Response) => {
  // 加这行调试
  console.log('请求Content-Type:', req.headers['content-type'], '解析到的body:', req.body);
  const { title } = req.body;
  // 剩下的业务逻辑
}

发请求后看终端打印结果:如果打印的Content-Type不是application/json,就是Thunder Client配置错了;如果Content-Type正确但body还是undefined,回去检查中间件和路由的加载顺序。

内容的提问来源于stack exchange,提问作者Géhème

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:12:22