/ / Gdzie nawiązać połączenie typu mangusta / dowolne połączenie z bazą danych - node.js, baza danych, mongodb, mongoose

Gdzie można uzyskać połączenie mangusta / dowolne połączenie z bazą danych - node.js, baza danych, mongodb, mangusta

Przeczytałem kilka dokumentów Stackoverflow idokumentacje mongoose dotyczące mongoose.connect () i mongoose.createConnection (), ale wydaje się, że nie ma wyraźnego wyjaśnienia tego ostatniego, w szczególności gdzie nawiązać połączenie. Nie jestem pewien, gdzie jest najlepsze miejsce na wykonanie mangoose lub jakichkolwiek połączeń z bazą danych, ale zwykle robię to w pliku server.js.

Czy można wykonywać połączenia w modelu?samo? Podczas korzystania z mongoose.createConnection () wydaje się, że połączenie w modelu jest jedyną opcją, ponieważ jeśli wykonam połączenie za pomocą createConnection w pliku serwera, nie będę mógł wyeksportować zwróconego obiektu połączenia i zaimportować go do pliku modelu .

Kiedy używam po prostu mongoose.connect (), zwykle mam to ustawione w pliku serwera,

var databaseUri = "mongodb://localhost/sampledatabse1020";

if (process.env.MONGODB_URI) {
mongoose.connect(process.env.MONGODB_URI);
} else {
mongoose.connect(databaseUri)
}

var database = mongoose.connection;

database.on("error", function(err) {
console.log("Mongoose Error: ", err);
});

database.once("open", function() {
console.log("Mongoose connection successful.");
});

ale jak już wcześniej powiedziałem, jeśli zmieniłem powyższy kod i użyłem

var connection = mongoose.createConnection()

Nie mogę wyeksportować connection zmienna przechowująca obiekt połączenia zwrócony z mongoose.createConnection (). Czy więc musiałbym zrobić to w modelu takim jak on

var mongoose = require("mongoose");

var connection = mongoose.createConnection("mongodb://localhost/food");

var Schema = mongoose.Schema;

var UserSchema = new Schema({
first_name: {
type: String,
trim: true,
required: "First Name is Required"
},
last_name: {
type: String,
trim: true,
required: "Last Name is Required"
},
email: {
type: String,
trim: true,
required: "Email is Required"
}
});

var User = connection.model("User", UserSchema);

module.exports = User;

Rozumiem również, że inną opcją jest miećoddzielny plik, aby wykonać wszystkie połączenia z bazą danych, a nie w pliku serwera, ale jeśli zrobię to w ten sposób, jak mogę to zrobić, aby połączenia były nawiązywane tylko wtedy, gdy jest to konieczne?

AKTUALIZACJA: Dodałem funkcję createConnection () w modelu i wydaje się, że działa dobrze. Wiem jednak, że tworzenie połączeń w modelu nie jest idealne, ale jeśli tak, to gdzie mogę skonfigurować metodę createConnection (), ponieważ nie mogę jej wyeksportować i zaimportować do modeli, gdy jest ona zdefiniowana w innym pliku na przykład w server.js. Wszelkie sugestie będą mile widziane.

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz utworzyć plik mongoose.js w następujący sposób:

const mongoose = require("mongoose");

mongoose.Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI, {useMongoClient: true});

module.exports = {mongoose};

Które następnie potrzebujesz w plikach modelu mangusty:

const mongoose = require("mongoose");

W ten sposób piszesz kod połączenia tylko raz i możesz zaimportować go tam, gdzie uznasz to za stosowne.


1 dla odpowiedzi nr 2

Nie używam Mongoose, ale myślę, że to zły pomysłże za każdym razem, gdy tworzysz nowy model lub instancję, tworzone będzie nowe połączenie z bazą danych. Powinno istnieć tylko jedno połączenie z bazą danych dla każdego żądania i mogą one zostać ponownie przetworzone w puli i czekać na następne żądanie. Oznacza to, że nie ważne ile masz modeli, powinny one dzielić to samo połączenie z bazą danych. Myślę, że połączenia z MongoDB są nadal cenne. Mam nadzieję, że ta sugestia trochę ci pomoże.