无法读取节点JS中未定义的属性“名称”

我在Node js中是新的。 我正在尝试使用mysql在节点js中制作CRUD应用程序。 但我面临着我无法理解或处理的错误。 请帮忙。 并在adv。

我无法从ejs页面读取input字段值到server.js页面。

我的server.js文件在下面给出

// server.js var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "tuts_rest" }); // set the view engine to ejs app.set('view engine', 'ejs'); // about page app.get('/about', function(req, res) { res.render('pages/about'); }); app.post('/insert', function(req,res){ con.connect(); console.log(req.body.name); con.query("INSERT INTO users(name,email,country) VALUES('"+req.body.name+"','"+req.body.email+"','"+req.body.country+"')", function(err, results) { if (!err) res.send('Inserted Successfully!') else throw error; }); con.end(); }); app.listen(8080); console.log('8080 is the magic port'); 

我正在发送以下数据使用表单

 <form role="form" action="/insert" method="POST"> <div class="form-group"> <label for="lname">Name:</label> <input type="text" class="form-control" id="name" name="name" required> </div> <div class="form-group"> <label for="email">Email address:</label> <input type="email" class="form-control" id="email" name="email" required> </div> <div class="form-group"> <label for="country">Country:</label> <input type="text" class="form-control" id="country" name="country"> </div> <button type="submit" class="btn btn-default">Submit</button> </form> 

错误如下

 TypeError: Cannot read property 'name' of undefined at E:\xampp\htdocs\node\basic\server.js:40:22 at Layer.handle [as handle_request] (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\layer.js:95:5) at next (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\layer.js:95:5) at E:\xampp\htdocs\node\basic\node_modules\express\lib\router\index.js:281:22 at Function.process_params (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\index.js:335:12) at next (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\index.js:275:10) at expressInit (E:\xampp\htdocs\node\basic\node_modules\express\lib\middleware\init.js:40:5) at Layer.handle [as handle_request] (E:\xampp\htdocs\node\basic\node_modules\express\lib\router\layer.js:95:5) 

要求body-parser不会做任何事情。 你需要让快递实际使用它。

 // accept url encoded app.use(bodyParser.urlencoded({ extended: true })); // accept json app.use(bodyParser.json()); 

注意:

  • 您的查询是广泛开放的SQL注入。 使用准备好的语句或使用像knex这样的查询生成器来为您做。

  • 不要一个接一个地创build和pipe理连接,而要使用连接池。 为此,请使用mysql.createPool而不是mysql.createConnection