查询来自postgresql函数的数据在app中不起作用,但在手动测试时有效

问题描述 投票:0回答:1

当我尝试使用简单的函数来查询我的网络应用程序的数据时,我遇到了烦恼。想法是使用一个函数列出一个表的内容;另一个使用此表中的user-selected record_id来查询另一个表中的详细内容数据的函数。

运行时,应用程序在没有数据的情况下运行两个函数而没有任何错误。检查控制台,发现第二个函数查询结果是null(我console.log第二个函数的输入,发现他们得到并使用正确的查询键)。因为我确信数据库有查询数据。

我试过了:

  1. 使用psql命令行使用相同的查询键查询数据,我的结果没有问题;
  2. 我运行一个节点命令行,并尝试通过提供查询键来运行这两个函数,它也给了我正确的结果。

所以功能应该有效。现在我的问题是为什么把它们放在应用程序中并让它们自己运行,它们没有得到查询结果?

我正在使用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);
  });
});

}

上面的函数只是尝试获取“item1”和“dataset1”以供将来使用,并将它们传递给下面的函数args。它完美地完成了它的工作。

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”是包含函数的模块名称。)

node.js postgresql pg
1个回答
0
投票

我终于找到了问题,这是一个低级错误,与数据库和查询无关。项目名称来自应用程序的下拉列表,它是函数args的源,有一个“”(空格)附加到名称的末尾(我不知道为什么?),它总是“!=”记录在数据库中:-(所以在应用程序中总是没有查询结果。但是对于功能测试,我硬编码正确的项目名称“==”数据库中的记录。因为它是“”,即使我在控制台.log(itemName),我最后没找到空格。

事实证明是“空间的错误”。

© www.soinside.com 2019 - 2024. All rights reserved.