1. 程式人生 > >NodeJS連線PostgreSQL報錯TCP.onRead

NodeJS連線PostgreSQL報錯TCP.onRead

NodeJS寫了介面,客戶端不停呼叫這個介面獲取資料,大概每次訪問到100的時候就會報個錯(TCP.onRead),整個Node服務端都會奔潰。

找了半天發現原來是client.end()放置的位置不對,應該在返回資料之前,而我放在最後,根本不會呼叫到,所以連線資料庫的客戶端不斷增大。

router.get('/getpoisummary', function(req, res) {
	var ptx = req.query["x"];
	var pty = req.query["y"];
	var radius = req.query["r"];
	if (radius > 5000){
		res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
		return res.end('{"status":"failed","message":"radius is larger than 5000 meters"}');
	}
    <span style="white-space:pre">	</span>var constring = "";
	var client = new pg.Client(constring);	
	client.connect(function(err){
		client.query("",function(err,result){
			var rowcount = result.rowCount;
			var nowdate = new Date();
			console.log("query succeed : " + nowdate + ", return record num : " + rowcount);
			if (rowcount == 0) {
				res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
				return res.end('{"status":"failed"}');
			}
			else
			{
				var outstr = '{"status":"ok","records":[';
				for(var ii=0; ii < rowcount; ii++) {
					var row = result.rows[ii];
					outstr +=  "";
				}
				outstr = outstr.substr(0, outstr.length - 1);
				outstr += ']}';
				res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'});
				return res.end(outstr);
			}
			client.end();
       });
    });
});