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