gpt4 book ai didi

node.js - 使用 Node.JS 从 mongodb 到 MongoLab

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:50 24 4
gpt4 key购买 nike

我正在尝试做这个家伙在这里做的同样的事情 How do I setup MongoDB database on Heroku with MongoLab?

该应用程序可在 Amazon EC2 上运行,我正在使用 MongoLabs 插件部署到 Heroku。

我到底应该输入什么来更改 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';

该行应该已经是正确的,无需更改任何内容。只要其中一个值存在,代码就会短路,因此仅当环境变量中不存在 MONGOLAB_URI 或 MONGOHQ_URL 时才使用“mongodb://localhost/mydb”。

也就是说,给定的 Heroku 应用程序很可能没有同时使用这两个 MongoDB 提供程序,因此仅包含您打算使用的变量名称是有意义的。例如,我的应用程序具有:

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

关于node.js - 使用 Node.JS 从 mongodb 到 MongoLab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com