2016-05-17 4 views
0

Ich habe eine Web-App in Entwicklung. Ich fand CW Buechler's tutorial darüber, wie man ein einfaches sehr nützlich macht, aber ein paar Niggling-Sorgen, die ich gerne wissen würde, ob sie echte Probleme sind oder Dinge, die ich ignorieren kann.Was ist eine effiziente, korrekte Art der Verwendung von Mönch/Mungo in Express-Middleware?

Die Art, wie ich meine Routen mit meiner Datenbank verbinde, stammt direkt aus den Tutorials.

In App.js instanziiert dieser Code die Datenbank und fügt jedem req-Objekt, das durch die Middleware fließt, einen Verweis hinzu.

// wire up the database 
var mongo = require('mongodb'); 
var db = require('monk')('localhost:27017/StarChamber'); 

----------8<------- 

// Make our db accessible to our router 
app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

Und in der Middleware es so gewöhnen:

app.get('/', function (req, res) { 
    var db = req.db; 
    var collection = db.get('myCollection'); 
    // do stuff to produce results 
    res.json (results); 
}); 

Also, meine nagenden Sorgen:

  1. die db zu den Routen Vorbei an den erf Befestigung ist ziemlich praktisch, aber wirkt sich das auf die Leistung aus? Wäre es besser, einen Verweis darauf in meiner Router-Datei zu haben, die ich einfach benutzen könnte? Was ist der Code dafür?
  2. Ist es eine gute Übung, die Sammlung zu löschen, nachdem sie benutzt wurde? Das Tutorium tut dies nicht, aber ein collection.drop() Aufruf vor dem Verlassen des Routen-Handlers sieht vorteilhaft aus, sonst denke ich, dass ich einfach viele offene Verbindungen mit der db aufbauen werde.

Danke wie immer!

Antwort

3
  1. Nein, die Leistung wird nicht beeinträchtigt. Es ist eine bequeme Methode, um einen Verweis auf db herum zu geben, aber mit Monk scheint es nicht besonders notwendig zu sein. Siehe unten für eine alternative Einrichtung.
  2. Sie verwirren collections mit connections. Erstere sind das MongoDB-Äquivalent von "tables" in SQL, daher scheint es keinen Sinn zu machen, sie zu löschen, da das im Grunde alle Daten in Ihrer Datenbanktabelle wegwerfen würde. Wie bei Verbindungen: Monk scheint über verschiedene Schichten von Indirektion den offiziellen MongoDB-Node-Treiber zu verwenden, der Verbindungen selbst verwaltet (mittels eines Verbindungspools). Sie müssen also nicht selbst damit umgehen.

Für eine alternative Möglichkeit, die Monk-Datenbank Griff vorbei um: Sie können es in einem separaten Modul platzieren können:

// database.js 
module.exports = require('monk')('localhost:27017/StarChamber'); 

Und in jedem Modul, wo Sie den Griff benötigen, können Sie es importieren:

var db = require('./database'); 
+0

vielen Dank - nur die Informationen, die ich suchte. – VorpalSword

Verwandte Themen