Wie kann ich setup-MongoDB-Datenbank auf Heroku mit MongoLab?

Ich bin mit Express.js und MongoLab, und ich folgte dem Heroku setup zu bekommen MongoDB zu arbeiten in die Produktion werfen, diesen code in meinem 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) {
    });
  });
});

und ich habe die folgenden Routen und Feld für meine E-Mail-Formular (auch in 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('/')
    });
});

Macht dies das neue Formular auf der index-Seite und lässt mich speichern Sie es lokal aber nicht in der Produktion, weil ich nicht weiß, wie das einrichten meiner E-Mail-Sammlung. Kann jemand gehen mir durch dieses? brand new, um mit MongoDB und Node.js so könnte etwas Hilfe gebrauchen.

EDIT:

In Der MongoLab-Datenbank-Schnittstelle, machte ich einen collection genannt emails. Ist das die richtige Vorgehensweise?

EDIT 2:

Hier ist die Definition EmailProvider in app.js zusammen mit der Datei selbst.

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;
  • Hi! Es scheint einige Kontext fehlt. Ihre MongoDB-Verbindung code sieht gut aus, aber was ist die definition von emailProvider?
  • OK, ich bearbeitet, um es leichter verständlich, was Los ist.
  • Lese ich richtig, dass Ihr EmailProvider ist die Verbindung zu " localhost:27017? Sind Sie versuchen, verbinden Sie es mit Ihrem MongoLab-Datenbank statt?
  • Ja, ich möchte zu verbinden MongoLab oder auf Heroku.
  • Ok, gut der code, wie gezeigt, ist die Verbindung zu einer Datenbank auf localhost:27017/localdb und alles, das setup in deinem ersten code-block wird ignoriert. Ich würde anfangen, durch ändern der EmailProvider Konstruktor zu nehmen, URI anstelle der host-und port und bewegen Sie den korrekten Anschluss der Logik zeigen Sie uns in der ersten code-block in es. Dann, in app.js übergeben Sie die MONGOLAB_URI dem Konstruktor anstelle von 'localhost' und 27017.
  • Der link (devcenter.heroku.com/articles/nodejs#using-mongodb) nicht mehr funktioniert. Die neue Seite ist elements.heroku.com/addons/#data-stores

InformationsquelleAutor Jryl | 2013-05-21
Schreibe einen Kommentar