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

Express.js已配置解析中间件后req.body返回undefined怎么解决

问题原因排查

你遇到的req.body为undefined可从以下几个方向排查:

  • 缺少express实例初始化:你贴出的代码里没有声明const app = express();就直接使用了app变量,这会直接导致后续逻辑异常,如果是漏贴可以忽略该条。
  • 中间件注册顺序错误:app.use(express.json())和app.use(express.urlencoded({ extended: false }))必须注册在所有路由定义之前,如果你把这两行配置写在了app.post("/api/jokes")的后面,中间件不会对该路由生效,自然无法解析请求体。
  • 请求头不匹配:请求的Content-Type头必须和你使用的解析中间件对应:
    • 发送JSON格式请求体时,请求头Content-Type必须为application/json,否则express.json()不会执行解析
    • 发送表单格式请求体时,请求头Content-Type必须为application/x-www-form-urlencoded,否则express.urlencoded()不会执行解析
  • 请求方法错误:只有POST、PUT等携带请求体的请求方法才能解析到req.body,如果误使用GET方法调用该接口,默认不会传递请求体。
正确代码示例
const express = require("express");
const path = require("path");
const fs = require("fs");
const jokes = require("./jokes.json");

// 第一步:初始化express实例
const app = express();
// 第二步:注册解析中间件,必须放在路由前面
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

// 第三步:定义路由
app.post("/api/jokes", (req, res) => {
    const newJoke = {
        question: req.body.question,
        answer: req.body.answer
    };
    console.log(req.body.question);
    res.json({ status: "success", data: newJoke });
});

const port = process.env.PORT || 5000;
app.listen(port, () => {
    console.log(`Server is running and listening on port ${port}...`);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:36:03