首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的pg-query结果抛出一个TypeError

为什么我的pg-query结果抛出一个TypeError
EN

Stack Overflow用户
提问于 2015-04-16 09:36:57
回答 2查看 1.8K关注 0票数 1

我正在创建一个节点函数,以便在PostgreSQL数据库中创建一个用户。我使用node.jspgpg-query从应用程序到数据库进行通信。

在我插入新记录之前,我正在尝试验证电子邮件地址是否已经不存在。

我不确定为什么我的result.rows[0].id抛出一个基于TypeError: Cannot read property '0' of undefined errordocumentation,我使用正确的语法来访问查询的结果。

这是函数:

代码语言:javascript
复制
/* 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'});
    }
    });
});

我收到的错误如下:

代码语言:javascript
复制
/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)

我刚接触javascriptnode,所以这可能是很明显的事情。这是pg-query documentation,如果它有用的话。

**解决方案**

将条件改为if(result[0].num == 0) {解决了这个问题。显然,pg-query不会返回名为rows的属性。

EN

回答 2

Stack Overflow用户

发布于 2015-04-17 01:14:45

**解决方案**

将条件改为if(result[0].num == 0) {解决了这个问题。显然,pg-query不会返回名为rows的属性。

票数 1
EN

Stack Overflow用户

发布于 2015-04-16 09:42:36

在我看来,rows对象是undefined,表示没有具有给定电子邮件地址的用户。您可以将查询更改为select count(*) as num from users where email = $1。这将确保得到结果,并且您可以测试是否为result.rows[0].num == 0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29663883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档