如何使用MongoLab在Heroku上设置MongoDB数据库?

我正在使用Express.js和MongoLab,我跟着Heroku安装程序来让MongoDB在生产环境中工作 ,把这段代码扔到我的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) { }); }); }); 

我的电子邮件表单(也在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('/') }); }); 

这会在索引页面上呈现新的表单,并让我将其保存在本地,但不能用于生产,因为我不知道如何设置我的电子邮件collections。 任何人都可以通过这个走过我? 全新使用MongoDB和Node.js,所以可以使用一些帮助。

编辑:

在MongoLab数据库接口中,我创build了一个名为emailscollection 。 这是正确的做法吗?

编辑2:

这里是在app.js中定义EmailProvider以及文件本身。

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; 

虽然第一个代码框中的连接代码看起来是正确的,但emailProvider对象不使用它。 相反,在app.js中,EmailProvider连接到localhost:27017,数据库名称在emailprovider.js中作为“localdb”硬编码。

你想要做的是使用你的EmailProvider中的MONGOLAB_URI环境variables提供的连接信息,它包含主机,端口和数据库名。

有很多方法可以做到这一点,但一种方法是将连接代码从第一个代码框移到EmailProvider构造函数中,然后更改构造函数,以便使用URI而不是主机和端口。 这样,您可以将MONGOLAB_URIvariables传递给app.js中的构造函数。