Как правильно обрабатывать соединения mongoose с помощью express.js?

У меня есть очень простая настройка «server.js», которую я пытаюсь запустить:

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...');

Это настроено для подключения кlocalhost:3000

Когда я перехожу кlocalhost:3000/first_test, он вызывает метод «popSingleData» внутри 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]));
                }
            }
        });


    });

};
...

Строки, которые вызывают проблему, являются первыми 3:

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

Когда они объявляются внутри функции, скрипт запускается, как и ожидалось, распечатывая JSON-объекты, найденные в базе данных. Когда они определены в testscript.js, новыходит за рамки метода, программа висит наdb.once('open', function callback () {...}); command.

Может ли кто-нибудь пролить свет на разницу, возникающую при перемещении этих 3 строк кода? Мне действительно нужно устанавливать новое соединение каждый раз, когда я хочу использовать другую функцию для доступа к базе данных?

Ответы на вопрос(1)

Ваш ответ на вопрос