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

时间:2013-05-21 00:57:10

标签: node.js mongodb express mlab

我正在使用Express.js和MongoLab,我跟随生产中的Heroku setup to get MongoDB working将此代码抛入我的 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('/')
    });
});

这会在索引页面上呈现新表单,并允许我在本地保存但不在生产中,因为我不知道如何设置我的电子邮件集合。谁能跟我走过这个?使用MongoDB和Node.js的新手,所以可以使用一些帮助。

编辑:

在MongoLab数据库界面中,我创建了一个名为collection的{​​{1}}。这是正确的行动方案吗?

编辑2:

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

app.js

emails

emailprovider.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);

1 个答案:

答案 0 :(得分:6)

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

您要做的是使用EmailProvider中MONGOLAB_URI环境变量中提供的连接信息,该信息包含主机,端口和数据库名称。

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