Ho un semplice setup "server.js" che sto provando a fare funzionare:Qual è il modo corretto di gestire le connessioni di mangusta con 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...');
Questa è configurato per la connessione a localhost:3000
Se navigando nelle localhost:3000/first_test
, si chiama la "popSingleData "metodo entro 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]));
}
}
});
});
};
...
le linee che causano questione sono i primi 3:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
Quando vengono dichiarati all'interno della funzione, lo script viene eseguito come previsto, stampando gli oggetti JSON trovati dal database. Quando sono definiti all'interno di testscript.js, ma non rientra nell'ambito del metodo, il programma si blocca su db.once('open', function callback() {...}); command
.
Qualcuno potrebbe far luce sulla differenza che si verifica dallo spostamento di queste 3 righe di codice? Devo davvero creare una nuova connessione ogni volta che voglio una funzione diversa per accedere al database?
Quindi "mongoose.connect' è ciò che crea la connessione? Quindi il motivo per cui non funziona quando si trova all'esterno del metodo, è che il metodo lo sta già trovando aperto, quindi il db.once ("open") non succede mai? –
Sì, ho cercato di chiarirlo nella mia risposta. – WiredPrairie
Meraviglioso. Spostato il codice dal callback e sembra funzionare alla grande. Grazie mille! –