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

Express中req.body.name1返回undefined问题求助

解决req.body.name1返回undefined的问题

我帮你找到了问题的根源,这是Express中间件的加载顺序导致的,还有一个小细节需要修正,具体如下:

核心问题:body-parser挂载顺序错误

在你的index.js文件中,你先加载了路由模块,之后才配置了body-parser中间件。Express的中间件是按注册顺序执行的,当请求到达/bookadded路由时,body-parser还没来得及解析请求体,所以req.body会是undefined,自然读不到name1属性。

修改后的index.js代码

把body-parser的配置代码移到加载路由之前:

var bodyParser = require ('body-parser')
var express = require ('express')
const mysql = require('mysql');
const app = express()
const port = 8000
const db = mysql.createConnection ({
 host: 'localhost',
 user: 'root',
 password: 'descarcare',
 database: 'myBookshop'
});
// connect to database
db.connect((err) => {
 if (err) {
 throw err;
 }
 console.log('Connected to database');
});
global.db = db;

// 先配置body-parser中间件,再加载路由
app.use(bodyParser.urlencoded({ extended: true }))

// 之后再加载路由模块
require('./routes/main')(app);

app.set('views',__dirname + '/views');
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

额外修正:main.js中的响应内容错误

你的main.js里,res.send语句里写的是req.body.name,但你的表单输入框的name属性是name1,所以这里应该改成req.body.name1,否则返回的内容会显示undefined:

// 修改前
res.send(' This book is added to database, name: '+ req.body.name + ' price '+ req.body.price);

// 修改后
res.send(' This book is added to database, name: '+ req.body.name1 + ' price '+ req.body.price);

完成这两处修改后,重新启动服务器,提交表单就能正确获取到req.body.name1和req.body.price的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:21