NodeJS DB连接在节点服务器的上下文中保持打开吗?

ybzsozfc  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(275)

这是一个更基本的问题,试图澄清我的理解…
通常情况下,如果我有一个简单的程序,如下面,它创建一个数据库连接,然后关闭它一旦脚本退出

import Database from 'better-sqlite3';
const db = new Database('./path/to/db.sqlite');

function foo(db) {
    return db.prepare('SELECT * FROM table').all(); 
}

console.log(foo(db));

但是,当我运行一个nodejs REST服务器,它启动后可能运行几天、几周、几个月而不关闭时,实际上会发生什么呢?是否每次用户进行查询时都会创建一个新的数据库连接,然后在返回结果时关闭连接?例如,使用fastify

fastify.get('/', async (request, reply) => {
  return foo(db)
})

node启动时创建一个连接,这样每次用户访问服务器时就不会重新创建连接,这样会更好吗?很可能我真的不明白这是如何工作的,因此我的问题。
注意,sqlite3 + node: when to close db?是一个类似的问题,但不完全是我要问的。

5vf7fwbs

5vf7fwbs1#

您需要使用connection pool。这将确保没有连接泄漏并正确管理可用连接。
建议代码:

const { Pool } = require("better-sqlite-pool");

var pool = new Pool("./path/to/db.sqlite");

function foo() {
    pool.acquire().then(db => {
        var retval = db.prepare('SELECT * FROM table').all();
        db.release();
        return retval;
    });
}

fastify.get('/', async (request, reply) => {
  return foo();
})

相关问题