我什么时候应该使用 pool.end()

sup*_*ods 1 postgresql node.js

当我pool.end()在查询后使用时,收到错误消息“无法读取未定义的属性‘行’”。在我看来,我不应该pool.end在查询完成后使用。那么我应该什么时候使用pool.end()呢?

下面是我的代码片段:

const pool = new Pool({
    user: process.env.PGUSER,
    host: process.env.PGHOST,
    database: process.env.PGDATABASE,
    password: process.env.PGPASSWORD,
    port: process.env.PGPORT
})

// Display schedule on home page
app.get('/', (req, res) => {
    const displaySchedule = `SELECT * FROM schedule`;

    pool.query(displaySchedule, (err, results) => {
        if(err) { 
            throw err; 
        }
        else {
            res.render('index', {schedules: results.rows});
        }
    })

    //pool.end();
});
Run Code Online (Sandbox Code Playgroud)

mad*_*low 7

pool.end 完全关闭池。在您的情况下 - 在网络场景中 - 您不想这样做。否则,您将必须针对每个新请求连接到池。这违背了池化的目的。

在您的示例中,无需调用pool.end- 您正在使用pool.query方法。您已完成所有设置,无需使用任何类型的客户端清理或池结束。

池通常是应用程序中长期存在的进程。您几乎不需要在 Web 应用程序中自行关闭它。

当您动态创建池或尝试正常关闭时,您将必须将其关闭。

例如:在测试环境中,您在所有功能/测试之前连接到池并在测试运行后断开连接,您pool.end在最后调用所有动态创建的池。