![](/img/trans.png)
[英]Getting error while connect to mongoDB in MongoLab using Node.js
[英]Going from mongodb to MongoLab using Node.JS
我正在嘗試執行此人在此處所做的相同操作如何使用MongoLab在Heroku上設置MongoDB數據庫?
該應用程序可在Amazon EC2上運行,並且我將使用MongoLabs附加組件部署到Heroku。
我到底應該輸入什么來將mongo連接更改為Mongo URI?
/** 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 */
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);
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而不是localhost?
var mongoUri = process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
'mongodb://localhost/mydb';
這行應該是正確的,無需更改任何內容。 一旦存在這些值之一,代碼就會短路,因此,僅當環境變量中不存在MONGOLAB_URI或MONGOHQ_URL時,才使用“ mongodb:// localhost / mydb”。
就是說,給定的Heroku應用很可能沒有同時使用兩個MongoDB提供程序,因此僅包含要使用的變量名是有意義的。 例如,我的應用程序具有:
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環境變量,例如:
$ heroku config:set NODE_ENV="production"
$ heroku config:set NPM_CONFIG_PRODUCTION=true
我使用的是MongoHQ,但與之類似,首先您需要在addon中為數據庫創建用戶,然后將憑據添加到URI(在mongo addon中應該看到uri)示例:
mongodb://用戶:pass@paulo.mongohq.com:10000 / app12345678
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.