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;
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
Vous devez vous connecter pour publier un commentaire.
Alors que le code de connexion dans la première zone de code semble correct, le emailProvider objet n'est pas à l'utiliser. Au lieu de cela, dans app.js le EmailProvider est connecté à localhost:27017 et le nom de base de données est codé en dur dans emailprovider.js comme "localdb'.
Ce que vous voulez faire à la place est d'utiliser les informations de connexion fournies dans le MONGOLAB_URI variable d'environnement dans votre EmailProvider, qui contient l'hôte, le port et le nom de base de données déjà.
Il y a un certain nombre de façons d'aller à ce sujet, mais d'une façon serait de passer votre code de connexion de la première zone de code dans le EmailProvider constructeur, puis modifiez le constructeur afin qu'il prenne une URI au lieu d'un hôte et un port. De cette façon, vous pouvez passer à la MONGOLAB_URI variable dans le constructeur de app.js.
OriginalL'auteur robert