【发布时间】:2023-03-27 15:10:01
【问题描述】:
我有一个模块 database.js 用于在 Node.JS 中运行 PostgreSQL 查询,如下所示:
const {Client}=require('pg');
const pgclient=new Client({
connectionString:process.env.DATABASE_URL,
ssl:true
});
pgclient.connect();
module.exports={
getUser:function(phonenumber){
queryStr='SELECT * FROM users where phonenumber=\''+phonenumber+'\';';
console.log(queryStr);
pgclient.query(queryStr, (err, res) => {
console.log("rows length "+res.rows.length);
if (err) throw err;
if (res.rows.length==0){
return null;
}
else{
return res.rows[0];
}
});
}
}
当我调用它时,使用例如
var db=require('./database');
userObj=db.getUser('+19991112222');
if (userObj==null){
console.log("user not found");
}
else{
console.log(userObj["phonenumber"]);
}
然后我得到以下控制台日志记录:
SELECT * FROM users where phonenumber='+19991112222';
user not found
因为rows length 行没有出现在控制台日志中,我认为pgclient.query() 调用要么未进行,要么立即静默失败并在@987654328 中的任何行之前返回null @函数被执行。如何让查询实际运行?
编辑:我认为正在发生的事情是,当调用 getUser 时,pgclient.connect() 尚未建立其数据库连接,因此 pgclient.query() 正在默默地失败。当我将所有连接代码和getUser 移动到包含我的测试程序的同一个文件中时,它运行成功。所以我需要做的是弄清楚如何在导出的函数可用于测试过程时在模块中建立连接。
【问题讨论】:
标签: node.js postgresql node-postgres