Sto usando Express.js e MongoLab e ho seguito lo Heroku setup to get MongoDB working in produzione lanciando questo codice nel mio app.js.Come posso impostare il database MongoDB su Heroku con MongoLab?
//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) {
});
});
});
e ho le seguenti percorsi e campi per il mio modulo e-mail (anche 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('/')
});
});
Ciò rende il nuovo modulo nella pagina indice e mi permette di salvare in locale, ma non in produzione perché non so come impostare la mia raccolta di email. Qualcuno può camminarmi attraverso questo? nuovo di zecca per l'utilizzo di MongoDB e Node.js, quindi potrebbe essere utile.
EDIT:
Nel MongoLab interfaccia Database, ho fatto un collection
chiamato emails
. È questa la giusta linea d'azione?
EDIT 2:
Ecco la definizione EmailProvider in app.js insieme al file stesso.
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;
Ciao! Sembra che manchi qualche contesto. Il tuo codice di connessione MongoDB sembra buono, ma qual è la definizione di emailProvider? – robert
@robert OK, ho modificato per rendere più comprensibile quello che sta succedendo. – Jryl
Sto leggendo correttamente che il tuo EmailProvider si connette a localhost: 27017? Stai invece cercando di collegarlo al tuo database MongoLab? – robert