节点postgres选择 - 如何访问返回的数据?

时间:2018-01-25 18:13:49

标签: sql node.js postgresql select

我正在尝试使用Node.js从Postgresql数据库中选择数据。我已经能够返回结果,但是我无法访问结果的内容。我的查询代码如下所示:

select: function(selection, table, condition, limit,callback)
{
    pool.connect(function(err, client, done)
    {
        let sql;
        let rows = [];
        if(selection === 'ALL')
        {
            sql = 'SELECT * FROM ' + table + ' WHERE ' + condition;
        }
        else
        {
            sql = 'SELECT ' + selection + ' FROM ' + table + ' WHERE ' + condition;
        }

        if(isDefined(limit))
        {
            sql = sql + ' LIMIT ' + limit;
        }
        if (err)
        {
            return console.error('Error acquiring client', err.stack);
        }
        if (sql === '')
        {
            console.log("Error: No SQL statement!");
        }
        else
        {
            console.log("Running query \'" + sql + "\'.");
            client.query(sql,
                function(err, result)
                {
                    if (err)
                    {
                        console.log('Query error: ' + err);
                    }
                    else
                    {
                        rows = result.rows;
                        callback(rows);
                    }
                });
        }
    });
},

回调传递“行”。拾取它的代码如下所示:

    let selection = 'prefname';
    let table = 'users';
    let condition = `fbid='${senderID}'`;
    let limit = 1;
    let dbData = [];
    let rowString;
    let greetingText;
    userData.FBUser = uName;
    db.select(selection,table,condition,limit, function(res)
        {
            dbData = res;
            if (!isDefined(dbData))
            {
                console.log("Nothing returned!");
            }
            else
            {
                rowString = JSON.stringify(dbData);
                console.log("Returned: " + rowString);
                for (let key in rowString)
                {
                    if (rowString.hasOwnProperty("prefname"))
                    {
                        console.log("TRUE");
                    }
                }
            }
        }
    );

现在,当我运行此代码时,我可以看到已从我的数据库返回了SOMETHING。在我的控制台日志中,我看到了:

2018-01-25T17:57:09.465642+00:00 app[web.1]: Running query 'SELECT prefname FROM users WHERE fbid='1769596366406807' LIMIT 1'.
2018-01-25T17:57:09.470727+00:00 app[web.1]: Returned: [{"prefname":"Sam"}]

所以我知道已经返回了SOMETHING,但由于某种原因,我无法进入JSON字符串将其拉出来。我已经尝试过使用......但它没有用。

有没有更好的方法来做我想做的事情?我甚至做得对吗?

1 个答案:

答案 0 :(得分:0)

数据通过变量res返回。然后,您立即在名称dbData下为该相同数据分配引用。您获取dbData,并将其字符串化为新变量rowString。现在你使用rowString,但它只是一个字符串,而不是一个可迭代的对象。您需要对dbData对象进行操作以迭代它的属性,而不是rowString

dbData看起来是一个对象数组,因此您需要确保迭代它。可以使用类似的东西:

for(let i = 0; i < dbData.length; i +=1{
  let obj = dbData[i];
  for(let key in obj){
    console.log(`Key: ${key}`);
    console.log(`Value: ${obj[key]}`);
  }
}

未经测试,所以这里只是从臀部拍摄,但它就是那样......