Node.js无法读取属性的名字' 未定义

我是node.js的新手 我正在尝试创build一个注册页面,并使用MySQL将input的值保存在数据库中。

我可以通过在请求头上传递参数来做到这一点。 但是,在请求头中传递参数总是不是个好主意。 所以试图传递请求正文的参数。

我使用Postman来testing我的node.js服务。

这里是我的演示应用程序的github链接

https://github.com/debasish283/node_gulp

在请求体中传递参数需要额外做些什么?

当在请求体中传递参数时,我得到了下面提到的错误。

TypeError:无法读取未定义的属性'firstname'
在Object.db.register(/var/projects/node_gulp/server/db.js:13:65)
在wrapper.register(/var/projects/node_gulp/server/wrapper.js:8:12)
在Layer.handle [作为handle_request](/var/projects/node_gulp/node_modules/express/lib/router/layer.js:95:5)
在下一个(/var/projects/node_gulp/node_modules/express/lib/router/route.js:131:13)
在Route.dispatch(/var/projects/node_gulp/node_modules/express/lib/router/route.js:112:3)
在Layer.handle [作为handle_request](/var/projects/node_gulp/node_modules/express/lib/router/layer.js:95:5)
at /var/projects/node_gulp/node_modules/express/lib/router/index.js:277:22
在Function.process_params(/var/projects/node_gulp/node_modules/express/lib/router/index.js:330:12)
在下一个(/var/projects/node_gulp/node_modules/express/lib/router/index.js:271:10)
在Function.handle(/var/projects/node_gulp/node_modules/express/lib/router/index.js:176:3)

代码: 服务器 – > wrapper.js

var express = require('express'); var db = require('./db.js'); var config = require('config'); var wrapper = { register: function(req, res) { console.log('inside wrapper'); db.register(req.body); } }; module.exports = wrapper; 

路线 – > index.js

 var router = require('express').Router(); var wrapper = require('../server/wrapper'); router.post('/register', wrapper.register); module.exports = router; 

app.js

 var express = require('express'); var app = express(); var port = process.env.PORT || 3000; var router = require('./routes'); var bodyParser = require('body-parser'); app.use('/', router); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.listen(port, function() { console.log('Server started at ' + port); }); 

服务器 – > db.js

 var mysql = require('mysql'); var config = require('config'); var connection = mysql.createConnection({ host: config.get('database.host'), user: config.get('database.user'), password: config.get('database.password'), database: config.get('database.database') }); var db = { register: function(parameter) { var qry = 'insert into users values (' + "'" + parameter.firstname + "'" + ',' + "'" + parameter.lastname + "'" + ',' + "'" + parameter.username + "'" + ',' + "'" + parameter.bday + "'" + ',' + "'" + parameter.gender + "'" + ',' + "'" + parameter.password + "'" + ')'; console.log(qry); connection.connect(); connection.query(qry, function(err, rows, fields) { if (!err) { console.log('The solution is: ', rows); } else console.log('Error while performing Query.' + err); }); connection.end(); } }; module.exports = db; 

您需要路由之前移动您的主体parsing中间件以便在执行您的路由处理程序之前先parsing请求主体:

 // app.js // ... app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use('/', router); // ... 

正文parsing器的正确顺序应该如下。

 app.use(bodyParser.json()); // support json encoded bodies app.use(bodyParser.urlencoded({ extended: true })); app.use('/', router); 

检查下面的链接的例子。
https://scotch.io/tutorials/use-expressjs-to-get-url-and-post-parameters