为什么我的pg-query结果抛出一个TypeError
我正在创build一个节点函数来在PostgreSQL
数据库中创build一个用户。 我使用node.js
, pg
和pg-query
从应用程序到数据库进行通信。
在插入新logging之前我试图validation电子邮件地址不存在。
我不知道为什么我的result.rows[0].id
是TypeError: Cannot read property '0' of undefined error
基于文档我使用正确的语法来访问我的查询结果。
这是function:
/* POST create user */ router.post('/adduser', function(req, res) { var salt = crypto.randomBytes(16); var newHash = hash(req.body.password, salt); query.connectionParameters = connString; query('SELECT id FROM users WHERE email = $1',[req.body.email], function(err, result) { if (err){ console.log('Insert error: ' + err); } // If email exists, return error else insert new record if(result.rows[0].id != null) { query('INSERT INTO users (email, password, salt) VALUES ($1, $2, $3)', [req.body.email, newHash, salt], function(err, result) { if (err){ console.log('Insert error: ' + err); } res.send( ( err === null ) ? { msg: '' } : { msg:err } ); }); } else{ console.log(result); res.send({msg:'User already exists'}); } }); });
而我收到的错误如下:
/home/robot/workspace/userapp/routes/users.js:35 if(result.rows[0].id != null) { ^ TypeError: Cannot read property '0' of undefined at /home/robot/workspace/userapp/routes/users.js:35:23 at Function.onSuccess (/home/robot/workspace/userapp/node_modules/pg-query/index.js:55:7) at null.callback (/home/robot/workspace/userapp/node_modules/pg-query/node_modules/okay/index.js:7:16) at Query.handleReadyForQuery (/home/robot/workspace/userapp/node_modules/pg/lib/query.js:80:10) at null.<anonymous> (/home/robot/workspace/userapp/node_modules/pg/lib/client.js:158:19) at emit (events.js:129:20) at Socket.<anonymous> (/home/robot/workspace/userapp/node_modules/pg/lib/connection.js:109:12) at Socket.emit (events.js:107:17) at readableAddChunk (_stream_readable.js:163:16) at Socket.Readable.push (_stream_readable.js:126:10)
我是新来的javascript
和node
所以它可能是非常明显的东西。 如果有帮助,这是pg-query
文档 。
**解决scheme**
将条件更改为if(result[0].num == 0) {
解决了问题。 pg-query
显然不返回一个叫做rows
的属性。
**解决scheme**
将条件更改为if(result[0].num == 0) {
解决了问题。 pg-query
显然不返回一个叫做行的属性。
它看起来像rows
对象是undefined
以表示没有给定电子邮件地址的用户。 你可以改变查询来select count(*) as num from users where email = $1
。 这将确保结果,并且可以testingresult.rows[0].num == 0
。