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

使用Node+Express+MongoDB开发REST API Postman测试报firstName undefined错误

问题根因

报错是因为Express中间件注册顺序错误:你先注册了api路由,之后才注册body-parser解析中间件,导致请求到达POST接口的控制器逻辑时,请求体还没有被解析,req.body为undefined,读取req.body.firstName就触发了对应的报错。

修复步骤

修改服务端配置的代码,调整中间件注册顺序,把body-parser的注册逻辑移到路由注册之前即可:

import Express from "express";
import Mongoose from "mongoose";
import CorsOptions from "cors";
import bodyParser from "body-parser";
import apiRoutes from "./routes/api.js";

const app = Express();

// 调整顺序:先注册解析请求体的中间件,再注册路由
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/api", apiRoutes);


const CONNECTION_URL =
  "mongodb+srv://user:Index-123@cluster0.uhijm.mongodb.net/SustainableIQ?retryWrites=true&w=majority";
const PORT = process.env.PORT || 5000;

Mongoose.connect(CONNECTION_URL)
  .then(() =>
    // 这里注意模板字符串要用反引号包裹,才能正确解析${PORT}变量
    app.listen(PORT, () => console.log(`server running on port: ${PORT}`))
  )
  .catch((error) => console.log(error.message));

额外优化建议

  • 如果你使用的是Express 4.16及以上版本,不需要单独安装引入body-parser,直接使用Express内置的express.json()和express.urlencoded()即可,功能完全一致
  • 控制器代码中你已经把req.body作为参数传给了模型构造函数(比如new adminSchema(admin)、new postUser(post)),不需要再单独给每个字段重复赋值,这部分代码可以直接删掉
  • 注意createUser方法里的compnayName拼写错误,正确拼写为companyName,避免后续字段存储异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:05