Javascript Node.js pg Pool第二次执行时速度慢
我遇到了一个奇怪的问题,我似乎没有弄对 我在Node.js应用程序中使用pg pooling,它在第一次执行时运行得非常快,然后在第二次执行时运行得非常慢30/50秒 我已经阅读了GitHub页面上的文档 这似乎需要使用一个全局变量,以避免创建多个池,我已尝试如下操作 我的主服务器文件如下Javascript Node.js pg Pool第二次执行时速度慢,javascript,node.js,postgresql,connection-pooling,node-pg-pool,Javascript,Node.js,Postgresql,Connection Pooling,Node Pg Pool,我遇到了一个奇怪的问题,我似乎没有弄对 我在Node.js应用程序中使用pg pooling,它在第一次执行时运行得非常快,然后在第二次执行时运行得非常慢30/50秒 我已经阅读了GitHub页面上的文档 这似乎需要使用一个全局变量,以避免创建多个池,我已尝试如下操作 我的主服务器文件如下 var express = require("express"); var path = require("path"); var app = express(); var port = 3000; app
var express = require("express");
var path = require("path");
var app = express();
var port = 3000;
app.use("/public", express.static(process.cwd() + "/public"));
app.set("views", process.cwd() + "/public/views");
app.set("view engine", "ejs");
var login_route = require("./public/logic/login/login_route.js");
app.use(login_route);
app.listen(port, function() {
var message = "Server Started: Port " + port;
console.log(message);
});
正在使用路由文件执行数据库查询
var express = require("express");
var router = express.Router();
var pg = require("pg");
var credentials = {
host: "127.0.0.1",
port: "5432",
database: "altaltalt",
user: "postgres",
password: "postgres",
max: 100,
idleTimeoutMillis: 30000
};
var pool = new pg.Pool(credentials);
// this bit of code is executed
// when a button is clicked
router.get("/exec", function(req, res) {
pool.connect (
function(error, client, done) {
if(error) {
console.log("connection failed");
}
client.query(
"select * from dummytable",
function(error, result) {
done();
if(error) {
console.log(error);
}
alert(result.rows);
}
);
}
);
});
module.exports = router;
当我向该路由发出get请求时,一旦按下按钮,它就会执行得非常快,但在按下按钮之后的任何时候,它都会变得非常慢
我在代码中遗漏了什么吗?是否有处理多个请求的附加步骤?节点中不存在警报。此外,当您接受HTTP请求时,应该发回响应。最后,如果只想运行一个查询,可以使用pool.query
总而言之:
router.get('/exec', function(req, res) {
pool.query('select * from dummytable', function(error, result) {
if (error) {
console.log('query failed');
return res.sendStatus(500);
}
res.send(result.rows);
});
});
并使用pool.connect:
过去我也遇到过类似的问题,我疯狂地使用这个库节点postgres。然后我发现了[pg PROMITE][1],它为您完成了关闭客户的所有工作,并以承诺为基础。我的生活改变了。[1] :听起来真不错,我一定要看看it@Trent迁移到将使您摆脱连接池及其管理方面的所有麻烦。Hello@robertklep,我正在使用节点webpack,这就是我使用警报的原因。另外,我也不知道为什么,但当我在末尾添加res.sendresult.rows位时,它就开始正常工作了,不能100%确定为什么会修复it@Trentalert是客户端浏览器代码,但您的代码旨在运行服务器端节点。我只在调试时使用alert,一旦bug被清除,我就会移除它fixed@Trent您是否打算在浏览器中运行此代码?@Trent很公平,如果node webkit确实定义了警报,那么我想可以使用它。
router.get('/exec', function(req, res) {
pool.connect(function(error, client, done) {
if (error) {
console.log('connection failed');
return res.sendStatus(500);
}
client.query('select * from dummytable', function(error, result) {
done(error);
if (error) {
console.log('query failed');
return res.sendStatus(500);
}
res.send(result.rows);
});
});
});