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?