gpt4 book ai didi

mysql - 无法读取 Node JS 中未定义的属性 'name'

转载 作者:行者123 更新时间:2023-11-29 05:07:11 24 4
gpt4 key购买 nike

我是 Node.js 的新手。我正在尝试使用 mysql 在 Node js 中制作 CRUD 应用程序。但我面临无法理解或处理的错误。请帮忙。并感谢副词。

我无法从 ejs 页面读取输入字段值到 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 不做任何事情。你需要让 express 实际使用它。

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

// accept json
app.use(bodyParser.json());

注意:

  • 您的查询对于 sql 注入(inject)是开放的。使用准备好的语句或使用像 knex 这样的查询构建器为你做。

  • 与其逐个创建和管理连接,不如使用连接池。为此,请使用 mysql.createPool 而不是 mysql.createConnection

关于mysql - 无法读取 Node JS 中未定义的属性 'name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45754634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com