client.query在node.js中的node-postgres库中没有响应

时间:2014-02-11 16:24:44

标签: javascript node.js postgresql

我现在正在学习如何在node.js中使用node-postgres包并表达,以便从Node.js中连接到postgres服务器。这是我写的代码,但client.query在这里根本不起作用:


var pg = require("pg");

exports.batting = function(req, res) {
    var conString = "postgres://myUserName:myPassword@localhost:5432/baseball";
    var client = new pg.Client(conString);
    pg.connect(conString, function(err, result) {
        console.log("enter connect");
        if (err) {
            console.log(err);
        } else {
            console.log("will execute a query");
            client.query("select * from batting;", function(err, result) {
                if (err) {
                    console.log(err);
                }
                console.log("success");
            });
        }
    });

}

请注意,我将上面的代码写入另一个文件,而不是在根app.js文件中。

但是,当我运行我的应用并访问相应的网址时,它确实没有返回任何内容。虽然enter connectwill execute a query显示在我的终端中,但看起来执行在client.query停止,而不是在success显示。

那为什么它不能按预期工作?我既没有任何经验也没有postgres的知识 - 我通常使用mysql并且刚安装了postgres,因为heroku不允许我使用mysql(实际上我可以通过第三方插件使用它)。当我使用mysql时,我已经能够成功返回结果,因此原因可能与我使用postgres服务器设置有关。

请注意我的postgres服务器正在运行,我确认我的用户名,密码和dbname是正确的(实际上我确实重置了密码)。

我使用节点版本v0.10.21和node-postgres @ 2.11.1。

1 个答案:

答案 0 :(得分:3)

你混淆了API调用。您可以用于查询的clientpg.connect函数返回:

pg.connect(conString, function(err, client, done){
     // handle err here
     client.query("select * from batting;", function(err, result) {
          // handle err here
            console.log("success");
            done(); // don't forget this to have the client returned to the pool
     });
});