无法读取未定义的属性“ID”。 performance

完整的代码如下 – 很简单,我想添加,删除或更新post – 当我做他们自己的东西之一,它的工作原理,但它打破

我已经在NodeJS MySQL中search了很多我用来查询数据库的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

据我可以告诉你从我的代码我build议你保持不同的url每个处理程序的方式,你会告诉哪个处理程序来调用,现在你所有的发布请求调用第一个处理程序是addpost

像这样映射你的处理程序

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

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