微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 如何使用MongoLab在Heroku上设置MongoDB数据库?

我正在使用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},rs) {
    });
  });
});

我的电子邮件表单(也在app.js中)有以下路由和字段:

//Routes

app.get('/',function(req,res) {
    res.render('index',{
        title: 'DumbyApp'
    });
});

//save new email
app.post('/',res){
    emailProvider.save({
        address: req.param('address')
    },function( error,docs) {
        res.redirect('/')
    });
});

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

编辑:

在MongoLab数据库界面中,我创建了一个名为emails的集合.这是正确的行动方案吗?

编辑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环境变量中提供的连接信息,该信息已包含主机,端口和数据库名称.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐