gpt4 book ai didi

mysql - 无法读取未定义的属性 'id'。表达

转载 作者:行者123 更新时间:2023-11-29 02:25:26 30 4
gpt4 key购买 nike

完整的代码如下 - 很简单,我想添加、删除或更新帖子 - 当我自己做其中一件事时,它可以工作,但一起它会中断

我在 NodeJS MySQL 中搜索了很多我用它来查询数据库

var mysql = require('mysql');

var connection = mysql.createConnection({
host : 'localhost',
port : 3306,
database: 'nodeproject',
user : 'noderoot',
password : 'default'
});

var express = require('express');
var http = require('http');
var path = require('path');
var exphbs = require('express3-handlebars');
var qs = require('querystring');

var app = express();

app.set('port', process.env.PORT || 8000);
app.set('views', path.join(__dirname, 'views'));
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}

configQuery = function() {
connection.config.queryFormat = function (query, values) {
if (!values) return query;
return query.replace(/\:(\w+)/g, function (txt, key) {
if (values.hasOwnProperty(key)) {
return this.escape(values[key]);
}
return txt;
}.bind(this));
};
}


index = function(req, res){
/*connection.connect(function(err){
if(err != null) {
res.end('Error connecting to mysql:' + err+'\n');
}
});*/

connection.query("SELECT * FROM posts", function(err, rows){
if(err != null) {
res.end("Query error:" + err);
} else {
var myOuterRows = [];
for (var i = 0; i < rows.length; i++) {
var myRows = rows[i];
myOuterRows.push(myRows);
};

res.render('index', {
title: 'Express Handlebars Test',
posts: myOuterRows
});
}
});
};

addpost = function(req, res) {
var post = {
id: req.body.post.id,
postTitle: req.body.post.postTitle,
postContent: req.body.post.postContent,
published: req.body.post.published
};

connection.query('INSERT INTO posts SET ?', post, function(err, result) {
console.log("Neat! you entered a post");
});

res.redirect("/");
}
editpost = function(req, res) {

configQuery();

var edit = {
id: req.body.editpost.id,
postTitle: req.body.editpost.postTitle,
postContent: req.body.editpost.postContent
};


var queryTitle = connection.query("UPDATE posts SET ?", edit, function(err, result) {
console.log("Neat! you editted a post")
});

res.redirect("/");
}
deletepost = function(req, res) {

configQuery();

var deleteThis = {
id: req.body.deletepost.id
};

console.log(deleteThis);

var queryDelete = connection.query("DELETE FROM posts WHERE id = :id", {
id: deleteThis.id
});

res.redirect("/");
}

app.get('/', index);

app.post('/', addpost);
app.post('/', editpost);
app.post('/', deletepost);

//app.get('/list', list);

http.createServer(app).listen(8000, function(){
console.log('Express server listening on port ' + app.get('port'));


});

我得到的错误如下:

500 TypeError: Cannot read property 'id' of undefined
at editpost (C:\dev\ExpressHbsMysql\app.js:96:24)
at callbacks (C:\dev\ExpressHbsMysql\node_modules\express\lib\router\index.js:164:37)
at param (C:\dev\ExpressHbsMysql\node_modules\express\lib\router\index.js:138:11)
at pass (C:\dev\ExpressHbsMysql\node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (C:\dev\ExpressHbsMysql\node_modules\express\lib\router\index.js:173:5)
at Object.router (C:\dev\ExpressHbsMysql\node_modules\express\lib\router\index.js:33:10)
at next (C:\dev\ExpressHbsMysql\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.methodOverride [as handle] (C:\dev\ExpressHbsMysql\node_modules\express\node_modules\connect\lib\middleware\methodOverride.js:48:5)
at next (C:\dev\ExpressHbsMysql\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at C:\dev\ExpressHbsMysql\node_modules\express\node_modules\connect\lib\middleware\urlencoded.js:83:7

最佳答案

它应该去哪里?

app.post('/', addpost);
app.post('/', editpost);
app.post('/', deletepost);

addposteditpostdeletepost

据我所知,从你的代码中我建议你为每个处理程序保留不同的 url,这样你就会知道要调用哪个处理程序,现在你所有的发布请求都会调用第一个处理程序,即 addpost

像这样映射你的处理程序

app.post('/post/add', addpost);
app.post('/post/edit', editpost);
app.post('/post/delete', deletepost);

接下来在您的表单中,或者如果您使用的是 ajax,请将您的 addrequest 发布到 '/post/add',将 editrequest 发布到 /post/edit 等等。

关于mysql - 无法读取未定义的属性 'id'。表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030601/

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