2012-05-02 15 views
5

Me estoy realmente confundiendo sobre cómo conectarme a MongoLab en Heroku. Para realizar la conexión con el URI de Heroku, yo estaba tratando de seguir este ejemplo: http://experiencecraftsmanship.wordpress.com/2012/01/06/heroku-node-js-mongodb-featuring-the-native-driver/¿Cómo uso node-mongodb-native para conectarme a Heroku?

Miré a sus dos web.js y deep.js. Ambos hacen algo como:

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

, solamente en la consulta de base de datos en 'contactos' van pasando en este servidor, entonces? ¿Se me permite hacer múltiples connect.createServer para cada uno de los métodos de acceso a mi base de datos?

Lo siguiente es parte de mi código cuando me conecto a MongoDB localmente. No estoy seguro de cómo modificarlo para conectarme a MongoLab en Heroku.

¿Alguien me puede enseñar cómo modificar mi código para conectarme? ¿O explicar algunos de estos conceptos? No tengo idea de por qué el autor de ese sitio web que publiqué utilizó tantas retrollamadas para hacer una llamada a la base de datos, cuando mi enfoque a continuación parece lo suficientemente sencillo (soy nuevo en JavaScript, no es bueno con devoluciones de llamadas).

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' }); 
}); 

Respuesta

2

Se conecta a la base de datos mongolab (por lo que no se puede crear una nueva base de datos "blog"). process.env.MONGOLAB_URI también incluye el nombre de la base de datos. Consulte a su uri mongolab:

heroku config | grep MONGOLAB_URI 

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

en GitHub hay an example how to connect and retrieve data from a mongolab database.

+0

yo estaba buscando en ese ejemplo. ¿Puedo llamar a connect.createServer (...) varias veces? Porque defino múltiples puntos finales de url que requieren acceso a la base de datos. Tampoco estoy seguro de cómo pasar mis propios parámetros desde los parámetros de la url. –

+0

No necesita crear Server para cada punto final de la url. Para manejar las operaciones de la base de datos, puede crear un tipo de proveedor. Vea un ejemplo de ["ArticleProvider" en el blog how-to-node] (http://howtonode.org/express-mongodb) –

2

Uso "conectar" para conectarse a mongo, en lugar de definir db, servidor, cliente:

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"); 

      }); 
}); 
Cuestiones relacionadas