2014-04-30 5 views
4

J'ai un fichier db.js qui a cette ligne dans le haut pour se connecter à la base de données .. j'appelle ce fichier pour exécuter des requêtes à l'intérieur d'autres fichiers js:nodejs connexion db une seule fois

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(); 

Si j'ai besoin de() ce fichier ci-dessus 4 fois dans des fichiers différents, cela signifie-t-il que la base de données sqlite sera initialisée autant de fois?

Je veux initialiser seulement la première fois ..

Est-ce inefficace? Y a-t-il un moyen plus efficace?

+0

Cette question m'a bogué pendant un moment. La personne froide répond aussi, si en général chaque fichier js lié à main.js doit importer les librairies qu'il utilise, ou si les fichiers requis dans main.js doivent être importés et que les fichiers js enfants n'ont plus besoin de re-require? – alandarev

Répondre

2

Documentation officielle: https://github.com/mapbox/node-sqlite3/wiki/Caching

Module Sqlite3 peut faire la mise en cache en interne si vous utilisez require('sqlite3').cached, à savoir qu'il ne va pas créer de nouvelles connexions sur new sqlite3.cached.Database(file) tant que chaîne détenue par file est identique, mais réutiliser ceux qui existent déjà. Voir dans la source pour vous-même ici: https://github.com/mapbox/node-sqlite3/blob/master/lib/sqlite3.js

Cependant, vous ne devriez pas dépendre de cela. Faire une sorte d'injection de dépendance, il permettra de sauver beaucoup de maux de tête en cours de route. Dans la forme la plus simple, il écrira vos modules qu'ils exportent des fonctions acceptant l'objet de base de données comme argument:

//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);