Node.js pg 池在第二次执行时变慢
Node.js pg Pool slow on second execute
我 运行 遇到了一个我似乎无法解决的奇怪问题。
我在 Node.js 应用程序中使用 pg 池,它在第一次执行时 运行 非常快,然后在第二次执行时速度非常慢(30/50 秒)。
我已通读 GitHub 页面上的文档 https://github.com/brianc/node-postgres/wiki/Example
这似乎需要使用全局变量才能不创建多个池,我已尝试按如下方式进行操作。
下面是我的主服务器文件
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 请求时,一旦按下按钮,它就会执行得非常快,但之后任何时候按下它都会变得非常慢。
我在代码中遗漏了什么吗?是否有额外的步骤来处理多个请求?
alert()
在节点中不存在。此外,当您接受 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()
:
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);
});
});
});
我 运行 遇到了一个我似乎无法解决的奇怪问题。
我在 Node.js 应用程序中使用 pg 池,它在第一次执行时 运行 非常快,然后在第二次执行时速度非常慢(30/50 秒)。
我已通读 GitHub 页面上的文档 https://github.com/brianc/node-postgres/wiki/Example
这似乎需要使用全局变量才能不创建多个池,我已尝试按如下方式进行操作。
下面是我的主服务器文件
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 请求时,一旦按下按钮,它就会执行得非常快,但之后任何时候按下它都会变得非常慢。
我在代码中遗漏了什么吗?是否有额外的步骤来处理多个请求?
alert()
在节点中不存在。此外,当您接受 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()
:
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);
});
});
});