Node.js只连接一次数据库

4

我有一个 db.js 文件,顶部有一行连接到数据库的代码。我可以在其他 js 文件中调用这个文件来运行查询:

var sqlite3 = require('sqlite3').verbose();

var db = new sqlite3.Database('./mydatabase');

db.serialize(function() {

db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {

  console.log(row.id + ": " + row.info);

});


db.close();

如果我在不同的文件中要求4次使用此文件,那么这是否意味着sqlite数据库将被初始化多次?
我希望仅在第一次初始化它。
这种做法是否低效?有更高效的方法吗?

这个问题困扰了我一段时间。冷静的回答者也可以告诉我,通常每个链接到main.js的js文件是否都必须导入它使用的库,还是要在main.js中进行requires操作,而子js文件不再需要重新require? - alandarev
1个回答

2

官方文档:https://github.com/mapbox/node-sqlite3/wiki/Caching

如果你使用require('sqlite3').cached,即使在new sqlite3.cached.Database(file)中,只要file所持有的字符串相同,Sqlite3模块就可以在内部进行缓存,而不会创建新的连接,而是重用现有的连接。你可以在这里自己查看源代码:https://github.com/mapbox/node-sqlite3/blob/master/lib/sqlite3.js

然而,你不应该依赖于此。进行某种形式的依赖注入,这将在很长的路上节省许多麻烦。最简单的形式是编写你的模块,使它们导出接受数据库对象作为参数的函数:

//module1.js
module.exports = function(db){
    db.serialize(...)
    //dostuff
}

//start.js
var sqlite3 = require('sqlite3').verbose();
var module1 = require('./module1.js');
var db = new sqlite3.Database('./mydatabase');

module1(db);

目前这种方法不起作用。传递后,db未定义。 - perustaja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接