nie mam żadnego doświadczenia z mongoskin ale Mongoose starannie pomija to problem polegający na zwracaniu instancji Singleton mangusty za każdym razem, kiedy tego potrzebujesz.
Umożliwia to utworzenie połączenia tylko raz (zwykle w aplikacji init) i po prostu go użyć, wysyłając zapytania do modeli, gdy są potrzebne.
Pozwala także na definiowanie modeli kiedyś tak:
var mongoose = require('mongoose'),
TodoSchema = new mongoose.Schema({
title: { 'type': String, 'default': 'empty todo...' },
order: { 'type': Number },
done: { 'type': Boolean, 'default': false }
});
mongoose.model('Todo', TodoSchema);
a następnie wykorzystać je wszędzie tam, gdzie trzeba lubić to:
var mongoose = require('mongoose'),
Todo = mongoose.model('Todo');
Więcej informacji na temat Mongoose działa tak, z przykładowym kodem można znaleźć w this answer here.
Od docs mongoskin jest, wygląda na to trzeba połączyć za każdym razem chcesz go używać, które można uprościć przez owinięcie połączenia db w pliku można wymagać:
db.js
exports.db = require('mongoskin').db('myProject-' + process.env.NODE_ENV);
użyć:
var db = require('./db');
db.open(function(err, data) {
(err) ? res.send('Internal server error', 500) : next();
});
Powyższa metoda, w dB jest przekazywany jako argument do każdej funkcji, może zaistnieć potrzeba, prowadzi do zwrotnego do zupy i należy go unikać, jeśli POSS ible.
nie widzę problemu ??? Jest już dostępny w wewnętrznej funkcji już w twoim przykładzie. Jeśli nie określisz funkcji wbudowanej, ale wywołasz ją zaimportowaną z innego modułu, po prostu nadaj jej tę funkcję jako parametrowi, prawdopodobnie umieszczając wywołanie tego (zewnętrznego) fn wewnątrz anonimowego fn, jak już pokazano w twoim przykładzie. –
Po edycji: nadaj mu funkcję wywoływaną z parametru "require" -d jako parametr (i upewnij się, że rzeczywiście używasz tego parametru tam, na przykład, aby ustawić zmienny globalny modułu, aby zapamiętał go dla innych funkcji tego modułu). Lub, daj to jako parametr dowolnej funkcji, która potrzebuje dostępu do bazy danych - co i tak byłoby czystszym programowaniem (do pewnego punktu). –
Przepraszam za zamieszanie. Zaktualizowałem kod w moim pytaniu, aby zawierał przykład mojej konfiguracji tras/kontrolera. Nie ma problemu z obsługą błędów, ale wciąż jestem bardzo zdezorientowany z tego, co powinienem zrobić, aby uzyskać dostęp do obiektu 'db' z poziomu kontrolera' users', w tym przypadku, bez uprzedniego przekształcenia 'db' w globalny. – Industrial