2016-04-08 8 views
0

Die Frage ist über Architektur.
Ich habe ein Modul 'db', das eine Verbindung zu mongodb herstellt und eine Klasse mit Schemas, Modellen usw. hat. Ich exportiere ein Exemplar dieser Klasse.
Sollte ich nur verlangen ('db') in jeder Route Datei oder tun dies nur in einem:Knoten js, erfordern überall oder fügen eine Eigenschaft zu req

server.on('request', function(req) { 
    req.db = db; 
}); 

db.js:

"use strict"; 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test'); 
var conn = mongoose.connection; 
conn.on('error', console.error.bind(console, 'connection error:')); 
conn.once('open', function() { 
    console.log("Connected to MongoDB."); 
}); 

class db { 
    constructor() { 
    //Users 
    this._usersSchema = mongoose.Schema(
     { 
     username: String, 
     password: String, 
     email: String 
     }); 
    this.Users = mongoose.model("Users", this._usersSchema); 
    } 
} 

module.exports = new db(); 
+0

Hängt von Ihrem DB-Modul ab. Wenn das Modul die gleiche Instanz jedes Mal erneut verwendet, wenn Sie es benötigen, müssen Sie es nur instanziieren. Wenn nicht, können Sie es weitergeben. Sie müssen jedoch mehr Informationen geben. –

+0

Ich habe einige Informationen über das Modul – Angels

+0

hinzugefügt. Mit Mungo müssen Sie nicht die db-Verbindung übergeben. Verwenden Sie einfach Ihre Schemamodelle, um mit der Datenbank zu interagieren. Das Modul kümmert sich um den Rest. –

Antwort

3

Ich glaube, Sie Meinungen unterscheiden finden, aber ich lieber zu require wo immer ich es brauche. modules in Knoten sind Singletons, so erhalten Sie immer die gleiche Instanz. Und ich teile gerne meine Controller-Logik in ihre eigenen Dateien abseits der Routen. Außerdem erwartet die Logik nicht die vollständigen Anfrage- und Antwortobjekte. Der Grund dafür ist, dass ich dann denselben Code verwenden kann, um Daten zu erfassen, die für die Bereitstellung eines API-Endpunkts erforderlich sind, oder die Ansicht serverseitig rendern, ohne dass das gesamte Anfrage- und Antwortobjekt kopiert wird.