我有一个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数据库会多次初始化?
我想第一次将其初始化..
这效率低吗?有更有效的方法吗?
答案 0 :(得分:2)
官方文件:https://github.com/mapbox/node-sqlite3/wiki/Caching
如果你使用require('sqlite3').cached
,Sqlite3模块可以在内部进行缓存,即只要new sqlite3.cached.Database(file)
保持的字符串相同,它就不会在file
上创建新连接,但重用现有的。在这里查看源代码:
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);