我正在尝试使用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字符串将其拉出来。我已经尝试过使用......但它没有用。
有没有更好的方法来做我想做的事情?我甚至做得对吗?
答案 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]}`);
}
}
未经测试,所以这里只是从臀部拍摄,但它就是那样......