我正在使用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中的构造函数.