来自postgresql函数的查询数据在应用程序中不起作用,但在手动测试时起作用
我尝试使用简单函数来查询我的Web应用程序的数据时遇到了一个麻烦。这个想法是使用一个函数来列出一个表的内容;另一个函数使用此表中的user-selected record_id
查询另一个表中的详细内容数据。来自postgresql函数的查询数据在应用程序中不起作用,但在手动测试时起作用
运行时,应用程序运行这两个函数时没有任何错误,但没有数据。检查控制台,发现第二个函数的查询结果是null
(我输入了第二个函数,发现他们得到并使用了正确的查询键)。因为我确信数据库有用于查询的数据。
我尝试:
- 使用
psql
命令行使用相同的查询键来查询数据,我有没有问题的结果; - 我运行一个节点命令行,并尝试通过提供查询键来运行这两个函数,它也给了我正确的结果。
所以功能应该工作。现在我的问题是为什么把它们放在应用程序中让它们自己运行,它们没有得到查询结果?
我正在使用pg = require("pg")
;和const pool = new pg.Pool(config)
用于数据库连接;
您的经验分享将非常感激。
(更新)功能是象下面这样:
function listItemDB(callback){
pool.connect(function(err, client, done) {
if(err) {
return console.error('error fetching client from pool', err);
}
//use the client for executing the query
client.query(`SELECT * FROM basicdb.items`,
function(err, result) {
//call `done(err)` to release the client back to the pool (or destroy it if there is an error)
done(err);
if(err) {
return console.error('error running query', err);
}
// console.log(result.rows);
callback(result.rows);
});
});
}
上述功能,只不过是想获得“物品1”和“数据集1”以备将来使用并传递给下面的函数参数。它完美地完成了它的工作。
function getFileName(itemName,datasetName, callback) {
let fileName;
console.log(itemName,datasetName);
pool.connect(function(err, client, done) {
if(err) {
return console.error('error fetching client from pool', err);
}
client.query("SELECT * "+
"FROM basicdb.dataset "+
"INNER JOIN basicdb.items "+
"ON basicdb.dataset.item_id = basicdb.items.item_id "+
"WHERE (basicdb.items.item_name = ($1)) "+
"AND (basicdb.dataset.datasetname = ($2))",[itemName,datasetName],
function (err, result){
done();
if(err) {
return console.error('error running query', err);
}
let records = result.rows;
fileName = records[records.length-1].filename;
callback(fileName);
});
});
}
此上述功能正在试图获得的文件名,因此主要的应用程序可以使用它。调用上面的函数在我的主app.js的代码是象下面这样:
db.getFileName("item1","dataset1",function(fileName) {
//do something with the fileName....}
(“DB”是模块的名称,其中包括的功能。)
我终于发现了问题,这是一个低级别的错误,并且与数据库和查询无关。 从应用程序中的下拉列表中获取的项目名称(这些项目名称是函数参数的源代码)有一个附加到名称末尾的“(空格)”(我不知道为什么?),它总是“!=”在数据库中记录:-(在应用程序中总是没有查询结果,但是对于函数测试,我硬编码的数据库中的记录是正确的“==”项目名称,因为它是“”,即使当我执行console.log(ITEMNAME),我没有找到末尾的空间。
原来是“空间的一个错误”。
请出示你的代码的相关部分。最可能的是你是不是正确地链接异步调用,但这是没有任何代码的疯狂猜测...... – jcaron
@Robin你需要发布你执行的代码,而不仅仅是天秤座初始化。 –
@https:// stackoverflow。com/users/3527940/jcaron,@ https://stackoverflow.com/users/1102051/vitaly-t,试图粘贴相关代码。你能分享一下你的经验吗?非常感谢。 – Robin