我有一个连接到 postgres db(node-postgres 模块 v2.1.0)的 nodeJS(v.0.10.23)代理,以及返回各种 json 数据的 pgpool-II。
过去,这是处理连接错误的方式:
var after = function(callback) {
return function(err, queryResult) {
if(err) {
response.writeHead(500, _header);
console.log("ERROR: 500");
console.log(err);
return response.end(JSON.stringify({error: err}));
}
callback(queryResult)
}
};
基本上,它的作用是在不存在错误的情况下消耗响应。
可以在这里找到深入的解释:Node js - http.request() 连接池问题 https://stackoverflow.com/questions/15533448/node-js-http-request-problems-with-connection-pooling#15537504
使用上面的函数,我得到了这样的结果:
pg.connect(_conString, after(function(err, client, done) {
client.query(sql, after(function(result) {
...
done();
}
由于当函数传递到 after() 回调时上下文会丢失,因此我失去了使用 pg.connect() 传递的固有 did() 方法的能力。
删除后解决了问题,但是,在适当的时候并且有相当数量的客户端拉取数据时,节点将挂起,直到重置。
是否有不同的方式来消费各种异步响应?
或者也许是将 pg.connect 上下文传递到回调中的方法?