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

Node.js提交表单存MongoDB报错Cannot read property 'cust_name' of undefined

问题根因

报错TypeError: Cannot read property 'cust_name' of undefined的核心是req.body的值为undefined,导致无法读取其下的cust_name属性,可按照以下步骤逐一排查:


排查步骤

  • 检查body解析中间件是否正确配置

    Express 4.16.0及以上版本已内置请求体解析能力,无需单独安装body-parser依赖,需要在所有路由定义之前完成解析中间件的初始化,示例配置如下:

    const express = require('express')
    const app = express()
    // 初始化JSON格式请求体解析,对应你代码里的jsonParser变量
    const jsonParser = express.json()
    // 如果前端是普通form表单提交(Content-Type为application/x-www-form-urlencoded),需要额外加这行
    app.use(express.urlencoded({ extended: true }))
    

    如果你当前的jsonParser变量没有正确初始化,也会导致请求体解析失败。

  • 检查请求头配置是否匹配

    如果你前端发送的是JSON格式请求,必须确保请求头的Content-Type字段值为application/json;如果是普通表单提交,确保已经配置了上述的urlencoded解析中间件。

  • 检查中间件加载顺序

    所有请求解析中间件的配置代码,必须放在路由定义代码的前面,否则中间件不会对后续定义的路由生效,导致req.body无法正常解析。

  • 修复代码里的笔误

    你当前的数据库保存回调里存在变量名错误,会在保存出错时报额外的未定义错误:

    // 原错误代码
    if(err){
        console.log(error); // 回调参数名为err,不存在error变量
    }
    // 修改为
    if(err){
        console.log(err);
    }
    

修正后可运行的参考代码

/* index.js */
const express = require('express')
const app = express()
const mongoose = require('mongoose')
const Leadlist = require('./list.model.js') // 要确保正确引入定义的模型

// 中间件配置放在最前面
const jsonParser = express.json()
app.use(express.urlencoded({ extended: true }))

// 路由定义
app.post('/leadtest',jsonParser, function(req, res){
    const doc = new Leadlist();
    doc.cust_name = req.body.cust_name;
    doc.save(function(err, data){
        if(err){
            console.log(err);
            res.status(500).send("数据保存失败")
        }
        else{
            res.send("Data inserted");
        }
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:09:02