Qual é a maneira correta de lidar com conexões de mangusto com o express.js?
Eu tenho uma configuração "server.js" muito simples que estou tentando executar:
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...');
Isso está configurado para conectarlocalhost:3000
Quando eu naveguei paralocalhost:3000/first_test
, ele chama o método "popSingleData" dentro de 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]));
}
}
});
});
};
...
As linhas que estão causando problema são as primeiras 3:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
Quando eles são declarados dentro da função, o script é executado conforme o esperado, imprimindo objetos JSON encontrados no banco de dados. Quando eles são definidos dentro de testscript.js, masfora do escopo do método, o programa trava nodb.once('open', function callback () {...}); command
.
Alguém poderia lançar alguma luz sobre a diferença que ocorre ao mover essas três linhas de código? Eu realmente preciso fazer uma nova conexão toda vez que eu quiser uma função diferente para acessar o banco de dados?