Node.js PostgreSQL请求被过早终止



我试图在使用节点的PostgreSQL db上执行更新,但我正在获得Error: Connection terminated执行UPDATE操作。我可能在处理连接时搞砸了,以适当的异步方式过早地终止了它们,但我不知道如何才能正确地执行。

很抱歉,这是一大块代码,但它非常简单。

//main.js
var result = require('./processes.js');
result.check(function(message) {
    console.log(message);
});
result.decrease(); //Throws an error.

//workers.js
var pg = require ('pg');
var fs = require('fs');
var db = JSON.parse(fs.readFileSync('../config.json', 'utf8')).db;
var querydb = require('./querydb.js');
var self = module.exports = {
    check: function(callback) {
        querydb.select("SELECT size FROM workers WHERE id = 1", function(results) {
            callback(results[0].size);
        });
    },
    increase: function() {
        self.check(function(workers) {
            querydb.update("UPDATE workers SET size = " + (workers + 1) + " WHERE id = 1");
        });
    },
    decrease: function() {
        self.check(function(workers) {
            querydb.update("UPDATE workers SET size = " + (workers - 1) + " WHERE id = 1");
        });
    }
};

//querydb.js
var pg = require ('pg');
var fs = require('fs');
var db = JSON.parse(fs.readFileSync('../config.json', 'utf8')).db;
var select = function(statement, callback) {
    pg.connect(db, function(err, client, done) {
        var results = [];
        //Handle errors
        if(err) {
            done();
            console.log(err);
        }
        var query = client.query(statement);
        //Stream results back
        query.on('row', function(row) {
            results.push(row);
        });
        //When all data is returned.
        query.on('end', function() {
            done();
            callback(results);
            client.end();
        });
    });
}
var update = function(statement) {
    pg.connect(db, function(err, client, done) {
        var results = [];
        //Handle errors
        if(err) {
            done();
            console.log(err);
        }
        var query = client.query(statement);
        //When all data is returned.
        query.on('end', function() {
            done();
            client.end();
        });
    });
}
module.exports = {
    select: select,
    update: update
};

好吧,这可能不是一个答案本身和更多的解决方案,但有同步调用这种脚本(即不是一个web服务器)是我想要的行为,所以我最终去pg原生而不是pg和重构我的querydbworkers模块使用它,现在一切都工作!

最新更新