是否可以以阻塞/同步方式使用节点js Postgres客户端

时间:2014-08-12 14:07:02

标签: node.js postgresql

我正在寻找一个节点js客户端连接到PostgreSQL 8.3并以同步阻塞模式运行我的查询(对于脚本而不是Web服务器)。

我目前正在使用https://github.com/brianc/node-postgres 哪个效果很好,但它只支持异步。

谢谢,

肖恩。

1 个答案:

答案 0 :(得分:4)

您可以在系列模式下使用async以同步方式运行查询,并避免多次回调结构:Async.series

pg.connect(configDB.connectionString, function(err, client, done) {
    if (err) { return console.error(err); }

    var condition = true;
    async.series([
        CreateExtensions,
        PushSQL,
        function (next) {
            if (condition) {
                UpdateTable(id, name, next);
            }
            else {
                next();
            }
        }
    ],
    function(err, results) {
        if (err) { console.error(err); }
        client.end();
        pg.end();
    });

    function CreateExtensions(callback)  {
        var queryConfig = 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;';
        client.query(queryConfig, function(err) {
            return callback(err);
        });
    }

    function PushSQL(callback)  {
        var queryConfig = fs.readFileSync("./database/cmdb.sql", 'utf8');
        client.query(queryConfig, function(err) {
            return callback(err);
        });
    }

    function UpdateTable(id, name, callback) {
        var queryConfig = "UPDATE table SET name = '" + name + "' WHERE id = " + id + ";";
        client.query(queryConfig, function(err) {
            condition = false;
            return callback(err);
        });
    }
});