使用Node.JS从MongoDB转到MongoLab

我正在尝试做这个人在这里做同样的事情如何在MongoLab上设置Heroku上的MongoDB数据库?

该应用程序在Amazon EC2上工作,我正在用MongoLabs插件部署到Heroku。

我应该input什么来改变Mongo连接到Mongo URI?

Heroku文档

/** https://devcenter.heroku.com/articles/getting-started-with-nodejs#write-your-app */ 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

 /** app.js */ var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path') , EmployeeProvider = require('./employeeprovider').EmployeeProvider; var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 8080); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.set('view options', {layout: false}); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(require('stylus').middleware(__dirname + '/public')); app.use(express.static(path.join(__dirname, 'public'))); }); app.configure('development', function(){ app.use(express.errorHandler()); }); var employeeProvider= new EmployeeProvider('localhost', 27017); //Routes app.get('/', function(req, res){ employeeProvider.findAll(function(error, emps){ res.render('index', { title: 'Employees', employees:emps }); }); }); app.get('/employee/new', function(req, res) { res.render('employee_new', { title: 'New Employee' }); }); //save new employee app.post('/employee/new', function(req, res){ employeeProvider.save({ title: req.param('title'), name: req.param('name') }, function( error, docs) { res.redirect('/') }); }); app.listen(8080); 

employeeprovider.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; EmployeeProvider = function(host, port) { this.db= new Db('node-mongo-employee', new Server(host, port, {safe: true}, {auto_reconnect: true}, {})); this.db.open(function(){}); }; EmployeeProvider.prototype.getCollection= function(callback) { this.db.collection('employees', function(error, employee_collection) { if( error ) callback(error); else callback(null, employee_collection); }); }; //find all employees EmployeeProvider.prototype.findAll = function(callback) { this.getCollection(function(error, employee_collection) { if( error ) callback(error) else { employee_collection.find().toArray(function(error, results) { if( error ) callback(error) else callback(null, results) }); } }); }; //save new employee EmployeeProvider.prototype.save = function(employees, callback) { this.getCollection(function(error, employee_collection) { if( error ) callback(error) else { if( typeof(employees.length)=="undefined") employees = [employees]; for( var i =0;i< employees.length;i++ ) { employee = employees[i]; employee.created_at = new Date(); } employee_collection.insert(employees, function() { callback(null, employees); }); } }); }; exports.EmployeeProvider = EmployeeProvider; 

我将如何更改employeeProvider使用URI而不是本地主机?

 var mongoUri = process.env.MONGOLAB_URI || process.env.MONGOHQ_URL || 'mongodb://localhost/mydb'; 

这条线应该已经是正确的,不需要改变任何东西。 只要其中一个值存在,代码就会短路,所以只有当环境variables中不存在MONGOLAB_URI或MONGOHQ_URL时才使用“mongodb:// localhost / mydb”。

也就是说,一个给定的Heroku应用程序没有使用两个MongoDB提供程序,因此只包含您打算使用的variables名是有意义的。 我的应用程序,例如,有:

 var mongoUri = process.env.MONGOLAB_URI || 'mongodb://localhost/test' 

首先检查你的NODE_ENV环境

 $ heroku config === ### Config Vars MONGODB_URI: mongodb://heroku_lhwpq2p3:sdvsdvsdvds@sdvsdv.mlab.com:dsvsd/heroku_lsdv NODE_ENV: production NPM_CONFIG_PRODUCTION: true 

你放在var的名字

 mongoUri = process.env.MONGOLAB_URI || localhost:.. 

应该 :

 var mongoUri = process.env.MONGODB_URI || localhost:.. 

如果错误仍然存​​在,则需要将NODE_ENV环境variables从开发设置为生产,如下所示:

 $ heroku config:set NODE_ENV="production" $ heroku config:set NPM_CONFIG_PRODUCTION=true 

我正在使用MongoHQ,但它的类似,首先你需要创build用户在你的数据库的插件,然后添加凭据到URI(你应该看到在你的蒙戈插件uri)例如:

mongodb的://用户:pass@paulo.mongohq.com:10000 / app12345678