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
相关产品推荐
相关产品推荐

