【问题标题】:Why is my pg-query result throwing a TypeError为什么我的 pg-query 结果抛出 TypeError
【发布时间】:2015-04-16 01:36:56
【问题描述】:

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

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

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

这是函数:

/* 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)

我是javascriptnode 的新手,所以这可能很明显。如果有帮助,这里是pg-query documentation

** 解决方案 **

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

【问题讨论】:

    标签: javascript node.js postgresql pg-query


    【解决方案1】:

    ** 解决方案 **

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

    【讨论】:

    • 如果您想节省处理返回结果的时间,请查看pg-promise
    【解决方案2】:

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

    【讨论】:

    • 即使进行了更改,我也会得到相同的错误响应。如果查询成功执行,我会想象result 里面会有一些东西。没有返回行或值或其他东西......
    • 两件事:首先查看我的编辑(注意我添加了一个列别名),第二个如果这不是问题,我将开始添加日志记录以检查内容或errresult对象。
    • 把条件改成这个就行了:if(result[0].num == 0) { 我猜 pg-query 不会像 pg 那样返回行的属性。
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2015-02-26
    • 1970-01-01
    • 2014-01-24
    相关资源
    最近更新 更多