Как правильно обрабатывать соединения 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 строк кода? Мне действительно нужно устанавливать новое соединение каждый раз, когда я хочу использовать другую функцию для доступа к базе данных?