Mam bardzo proste "server.js" setup że próbuję uruchomić:Jaki jest właściwy sposób radzenia sobie z połączeniami mangusty z plikiem express.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...');
To jest skonfigurowany do łączenia się localhost:3000
Kiedy przejdź do localhost:3000/first_test
, to nazywa „popSingleData "metody 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 które powodują problem stanowią pierwszy 3:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
Po zadeklarowaniu w funkcji skrypt działa zgodnie z oczekiwaniami, wypisując obiekty JSON znalezione z bazy danych. Gdy są zdefiniowane w testscript.js, ale poza zakresem metody, program zawiesza się na db.once('open', function callback() {...}); command
.
Czy ktoś mógłby rzucić nieco światła na różnicę, która powstaje podczas przenoszenia tych 3 linii kodu? Czy naprawdę muszę utworzyć nowe połączenie za każdym razem, gdy chcę mieć inną funkcję dostępu do bazy danych?
Więc 'mongoose.connect' jest tym, co tworzy połączenie? Więc powodem, dla którego nie działa, gdy jest poza metodą, jest to, że metoda znajduje to już otwarte, więc db.once ("open") nigdy się nie dzieje? –
Tak, próbowałem wyjaśnić to w mojej odpowiedzi. – WiredPrairie
Cudownie. Usunięto kod z wywołania zwrotnego i wygląda na to, że działa świetnie. Dziękuję bardzo! –