Jaki jest właściwy sposób obsługi połączeń mongoose z express.js?

Mam bardzo prostą konfigurację „server.js”, którą próbuję uruchomić:

var express = require('express'),
    wines = require('./routes/testscripts');

var app = express();

app.get('/first_test', wines.popSingleData);

app.listen(3000);
console.log('Listening on port 3000...');

Jest to skonfigurowane do łączenia sięlocalhost:3000

Kiedy nawiguję dolocalhost:3000/first_test, wywołuje metodę „popSingleData” w testscript.js:

...
    var mongoose = require('mongoose');

    mongoose.connect('mongodb://localhost/test');

    var db = mongoose.connection;

    console.log('include called');

exports.popSingleData = function(req, res) {

//  var mongoose = require('mongoose');

//  mongoose.connect('mongodb://localhost/test');

//  var db = mongoose.connection;

    console.log('function called');

    db.on('error', console.error.bind(console, 'connection error:'));
    console.log('error handler set');
    db.once('open', function callback () {
        //yay!
        console.log("DB Opened");

        var someSchema = require('../models/someSchema');

        someSchema.find(function (err, found){
            if (err) 
            {
                console.log('err');
            }

            if(found.length != 0) 
            {
                console.log("Found Data:");
                console.log(found);
                for( var i = 0; i < found.length; i++)
                {
                    res.jsonp((found[i]));
                }
            }
        });


    });

};
...

Linie powodujące problem to pierwsze 3:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;

Gdy zostaną zadeklarowane w funkcji, skrypt działa zgodnie z oczekiwaniami, wypisując znalezione obiekty JSON z bazy danych. Kiedy są zdefiniowane w testscript.js, alepoza zakresem metody, program zawiesza się nadb.once('open', function callback () {...}); command.

Czy ktoś mógłby rzucić nieco światła na różnicę wynikającą z przesunięcia tych trzech linii kodu? Czy naprawdę muszę nawiązać nowe połączenie za każdym razem, gdy chcę uzyskać dostęp do bazy danych za pomocą innej funkcji?

questionAnswers(1)

yourAnswerToTheQuestion