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

Node.js表单提交报错求助:TypeError读取conteudo属性失败

Node.js表单提交报错:TypeError: Cannot read properties of undefined (reading 'conteudo')

报错信息

TypeError: Cannot read properties of undefined (reading 'conteudo')

问题代码

const express=require("express");
const app=express();
const handlebars=require("express-handlebars");
const Sequelize=require("sequelize");


const sequelize=new Sequelize("test","root","88182231",{
    host:"localhost",
    dialect:"mysql"
})

app.get("/card",function(req,res){
    res.render("form")
})

app.post("/add",function(req,res){
     res.send("conteudo:"+req.body.conteudo+" titulo:"+req.body.titulo)
})

app.engine("handlebars", handlebars.engine({ defaultLayout: "main" }));
app.set("view engine","handlebars");
app.use(express.urlencoded({extended:false}))
app.use(express.json())

解决方案

问题根源是Express的请求体解析中间件被放在了路由定义之后,导致路由处理函数执行时req.body未被解析,处于undefined状态,因此无法读取conteudo属性。

只需将express.urlencoded和express.json中间件的调用移到所有路由定义之前即可修复:

const express=require("express");
const app=express();
const handlebars=require("express-handlebars");
const Sequelize=require("sequelize");

// 先加载请求体解析中间件
app.use(express.urlencoded({extended:false}))
app.use(express.json())

const sequelize=new Sequelize("test","root","88182231",{
    host:"localhost",
    dialect:"mysql"
})

app.get("/card",function(req,res){
    res.render("form")
})

app.post("/add",function(req,res){
     res.send("conteudo:"+req.body.conteudo+" titulo:"+req.body.titulo)
})

app.engine("handlebars", handlebars.engine({ defaultLayout: "main" }));
app.set("view engine","handlebars");

Express中间件按顺序执行,只有先通过解析中间件处理请求,后续路由才能访问到解析后的req.body。你之前更换数据库、修改数据类型的操作和该报错无关,因为问题出在请求体解析环节,尚未涉及数据库操作。

内容的提问来源于stack exchange,提问作者Luiz Fernando da silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:08