2012-05-02 13 views
5

Mi sto davvero confondendo su come connettermi a MongoLab su Heroku. di connettersi utilizzando l'URI di Heroku, stavo cercando di seguire questo esempio: http://experiencecraftsmanship.wordpress.com/2012/01/06/heroku-node-js-mongodb-featuring-the-native-driver/Come si usa node-mongodb-native per connettersi a Heroku?

ho guardato entrambi i suoi web.js e deep.js. Entrambi fare qualcosa di simile:

connect.createServer(
    require('connect-jsonrpc')(contacts) 
).listen(port); 

Ma allora solo la query di database in 'contatti' viene passato in questo server, allora? Sono autorizzato a eseguire più connect.createServer per ciascun metodo di accesso al mio database?

Quanto segue fa parte del mio codice quando ci si collega a MongoDB localmente. Non sono sicuro di come modificarlo per connettersi a MongoLab su Heroku.

Qualcuno può insegnarmi come modificare il mio codice per connettersi? O spiegare alcuni di questi concetti? Non ho idea del motivo per cui l'autore di quel sito Web che ho pubblicato abbia utilizzato così tante callback per effettuare una chiamata al database, quando il mio approccio in basso sembra abbastanza semplice (sono nuovo di JavaScript, non buono con i callback).

var app = module.exports = express.createServer(
    form({ keepExtensions: true }) 
); 

var Db = require('mongodb').Db; 
var Server = require('mongodb').Server; 
var client = new Db('blog', new Server('127.0.0.1', 27017, {})); 

var posts; 
var getAllPosts = function(err, collection) { 
    collection.find().toArray(function(err, results) { 
    posts = results; 
    console.log(results); 
    client.close(); 
    }); 
} 


app.get('/', function(req, response) { 
    client.open(function(err, pClient) { 
    client.collection('posts', getAllPosts); 
    }); 

    // some code 
    response.render('layout', { posts: posts, title: 'Raymond', contentPage: 'blog' }); 
}); 

risposta

2

Si connette al database mongolab (quindi non si può creare un nuovo database "blog"). process.env.MONGOLAB_URI include anche il nome del database. Consultare l'uri mongolab:

heroku config | grep MONGOLAB_URI 

Assomiglia: mongodb://heroku_app123456:[email protected]:27737/heroku_app123456

su GitHub c'è an example how to connect and retrieve data from a mongolab database.

+0

stavo guardando quell'esempio. Posso chiamare connect.createServer (...) più volte? Perché definisco più endpoint URL che richiedono l'accesso al database. Inoltre, non sono sicuro di come passare i miei parametri dai parametri dell'URL. –

+0

Non è necessario creare server per ogni endpoint URL. Per gestire le operazioni del database è possibile creare un tipo di Provider. Guarda un esempio di ["ArticleProvider" sul blog how-to-node] (http://howtonode.org/express-mongodb) –

2

Usa "connect" per la connessione a mongo, invece di db definire, di server, client:

var connect = require('connect'); 
var mongo = require('mongodb'); 
var database = null; 

var mongostr = [YOUR MONGOLAB_URI]; 

mongo.connect(mongostr, {}, function(error, db) 
    {  
      console.log("connected, db: " + db); 

      database = db; 

      database.addListener("error", function(error){ 
      console.log("Error connecting to MongoLab"); 

      }); 
});