2016-04-02 19 views
3

Ich benutze das Express-Framework und möchte eine Verbindung zu einem Mongodb ohne Mungo, aber mit dem nativen Mongodb-Treiber nodejs herstellen. Wie kann ich dies tun, ohne jedes Mal eine neue Verbindung zu erstellen?Wie kann ich mit mongodb mit Express ohne Mungo verbinden?

Um Anfragen zu bearbeiten oder zu bearbeiten, öffne ich momentan eine neue Verbindung zur Datenbank für jede Anfrage und schließe sie nach Abschluss der Anfrage. Gibt es einen besseren Weg, dies zu tun? Danke im Voraus.

+2

Ich weiß nicht, dass Sie wirklich wirklich eine neue Verbindung jedes Mal öffnen. Schauen Sie sich https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connection-pooling – Paul

+0

an, aber in diesem Fall, wenn die Verbindung zur db nicht hergestellt werden konnte, wird der Server es selbst tun nicht auf sein. –

+0

Das Grundmuster funktioniert immer noch. Ich werde eine Antwort auf diesen Effekt folgen. – Paul

Antwort

3

Folgen Sie dem Beispiel aus meinem Kommentar, ändern Sie es, so dass die App Fehler behandelt, anstatt den Server nicht zu starten.

var express = require('express'); 
var mongodb = require('mongodb'); 
var app = express(); 

var MongoClient = require('mongodb').MongoClient; 
var db; 

// Initialize connection once 
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database) { 
    if(err) return console.error(err); 

    db = database; 

    // the Mongo driver recommends starting the server here because most apps *should* fail to start if they have no DB. If yours is the exception, move the server startup elsewhere. 
}); 

// Reuse database object in request handlers 
app.get("/", function(req, res, next) { 
    db.collection("replicaset_mongo_client_collection").find({}, function(err, docs) { 
    if(err) return next(err); 
    docs.each(function(err, doc) { 
     if(doc) { 
     console.log(doc); 
     } 
     else { 
     res.end(); 
     } 
    }); 
    }); 
}); 

app.use(function(err, req, res){ 
    // handle error here. For example, logging and returning a friendly error page 
}); 

// Starting the app here will work, but some users will get errors if the db connection process is slow. 
    app.listen(3000); 
    console.log("Listening on port 3000"); 
+0

Danke Paul .... dieses Muster ist definitiv etwas, mit dem ich arbeiten kann. –

+0

Was ist, wenn ich Mungo benutze? –

+0

@SudhirKaushik was ist wenn du bist? Diese Antwort lautet auf die Frage "Wie mache ich es ohne Mungo?". – Paul

1
var mongodb = require('mongodb'); 
var uri = 'mongodb://localhost:27017/dbname'; 

module.exports = function(callback) { 
    mongodb.MongoClient.connect(uri, callback); 
}; 

Ad diese Schnipsel in einer Datei sagen connect.js und dann benötigen Sie diese Datei (connect.js) in der Datei, wo Sie Ihre Funktionen für HTTP-Anfragen deklarieren.

+1

Aber dieses Snippet wird auch immer eine neue Verbindung Anfrage und das ist etwas, was wir nicht wollen –

+0

Meiner Meinung nach ist dies der richtige Weg, d. H. Zu prüfen, ob die Verbindung hergestellt ist oder nicht, bevor eine HTTP-Anfrage. – amanpurohit

+1

Ich glaube, dass die Anforderung dieses Snippets in der Anwendung zwischengespeichert wird und es wird nicht jedes Mal eine neue Anfrage gestellt. – Tiramisu

Verwandte Themen