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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während die Anschluss-code in der ersten code-box richtig zu sein scheint, der emailProvider Objekt nicht mehr zu verwenden. Statt, in app.js der EmailProvider ist die Verbindung zu localhost:27017 und der name der Datenbank ist fest in emailprovider.js als 'localdb'.
Was Sie wollen zu tun, sondern ist die Verbindung verwenden, Informationen in die MONGOLAB_URI Umgebungsvariable in Ihrem EmailProvider, die enthält den host, port und Datenbank name schon.
Gibt es eine Reihe von Möglichkeiten, dies zu tun, aber eine Möglichkeit wäre, sich zu bewegen, Ihre Verbindung code aus der ersten code-box in das EmailProvider Konstruktor, und dann ändern Sie den Konstruktor so, dass es dauert eine URI statt einer host-und port. So können Sie passieren die MONGOLAB_URI variable an den Konstruktor in app.js.