Comment puis-je configurer la base de données MongoDB sur Heroku avec MongoLab?

Je suis en utilisant Express.js et MongoLab et j'ai suivi le Heroku le programme d'installation pour obtenir MongoDB travail dans la production de lancer ce code dans mon app.js.

//Mongo on Heroku Setup
var mongo = require('mongodb');

var mongoUri = process.env.MONGOLAB_URI || 
  process.env.MONGOHQ_URL || 
  'mongodb://localhost/mydb'; 

mongo.Db.connect(mongoUri, function (err, db) {
  db.collection('mydocs', function(er, collection) {
    collection.insert({'mykey': 'myvalue'}, {safe: true}, function(er,rs) {
    });
  });
});

et j'ai les lignes suivantes et le champ de mon formulaire électronique (également dans app.js):

//Routes

app.get('/', function(req, res) {
    res.render('index', {
        title: 'DumbyApp'
    });
});

//save new email
app.post('/', function(req, res){
    emailProvider.save({
        address: req.param('address')
    }, function( error, docs) {
        res.redirect('/')
    });
});

Ce qui rend le nouveau formulaire sur la page d'index et me permet de l'enregistrer en local, mais pas dans la production, car je ne sais pas comment configurer mon e-mail de la collection. Quelqu'un peut-il me guider à travers cette? nouvelle marque à l'aide de MongoDB et Node.js, pourrait utiliser un peu d'aide.

EDIT:

Dans Le MongoLab Interface de Base de données, j'ai fait un collection appelé emails. Est-ce le bon déroulement de l'action?

EDIT 2:

Voici la définition EmailProvider dans app.js avec le fichier lui-même.

app.js

 var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , EmailProvider = require('./emailprovider').EmailProvider;

var emailProvider= new EmailProvider('localhost', 27017);

emailprovider.js

var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;
EmailProvider = function(host, port) {
this.db= new Db('localdb', new Server(host, port, {safe: false}, {auto_reconnect: true}, {}));
this.db.open(function(){});
};
EmailProvider.prototype.getCollection= function(callback) {
this.db.collection('emails', function(error, email_collection) {
if( error ) callback(error);
else callback(null, email_collection);
});
};
//save new email
EmailProvider.prototype.save = function(emails, callback) {
this.getCollection(function(error, email_collection) {
if( error ) callback(error)
else {
if( typeof(emails.address)=="undefined")
emails = [emails];
for( var i =0;i< emails.address;i++ ) {
email = emails[i];
email.created_at = new Date();
}
email_collection.insert(emails, function() {
callback(null, emails);
});
}
});
};
exports.EmailProvider = EmailProvider;
Salut! Il semble y avoir un contexte manquant. MongoDB code de connexion a l'air bien, mais quelle est la définition de emailProvider?
OK, j'ai édité pour la rendre plus compréhensible de ce qu'il se passe.
Suis-je la lire correctement que votre EmailProvider est de se connecter à localhost:27017? Êtes-vous essayer de vous connecter à votre MongoLab base de données à la place?
Oui, je veux le connecter à MongoLab ou sur Heroku.
Ok, eh bien, le code est de la connexion à une base de données sur localhost:27017/localdb et tous que l'installation dans votre premier bloc de code est ignoré. Je commencerais par changer le EmailProvider constructeur de prendre une URI à la place de l'hôte et le port et déplacer la connexion correcte de la logique dont vous faites preuve dans le premier bloc de code dans. Puis, dans app.js, passer le MONGOLAB_URI pour le constructeur au lieu de "localhost" et 27017.

OriginalL'auteur Jryl | 2013-05-21