2013-05-21 6 views
7

Express.js와 MongoLab을 사용하고 있는데이 코드를 Heroku setup to get MongoDB working에 던져서이 코드를 내 app.js에 던집니다. 이 인덱스 페이지에 새 양식을 렌더링하고 나 로컬에 저장할 수 있지만MongoLab에서 Heroku의 MongoDB 데이터베이스를 어떻게 설정합니까?

//Routes 

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

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

:

//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}, function(er,rs) { 
    }); 
    }); 
}); 

나는 (또한 app.js에서) 내 이메일 양식에 대한 다음과 같은 경로 및 필드가 이메일 수집을 설정하는 방법을 모르기 때문에 프로덕션 환경에 있지 않습니다. 아무도 이것을 통해 나를 걸을 수 있습니까? MongoDB와 Node.js를 사용하는 것에 새로운 브랜드이기 때문에 약간의 도움을받을 수 있습니다.

는 편집 : MongoLab 데이터베이스 인터페이스에서

, 나는 collectionemails라고했다. 이것이 올바른 행동의 과정입니까?

편집 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 제 코드 박스의 연결 코드가 올바른 것으로 나타나는 반면, emailProvider 객체를 사용하지

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; 
+1

안녕하세요! 일부 문맥이 누락 된 것 같습니다. MongoDB 연결 코드는 괜찮아 보이지만 emailProvider의 정의는 무엇입니까? – robert

+0

@robert 좋아, 어떻게 진행되고 있는지 더 잘 이해할 수 있도록 편집했습니다. – Jryl

+1

EmailProvider가 localhost : 27017에 연결하고 있음을 올바르게 읽고 있습니까? 대신 MongoLab 데이터베이스에 연결하려고합니까? – robert

답변

6

. 대신 app.js에서 EmailProvider가 localhost : 27017에 연결되고 데이터베이스 이름이 emailprovider.js에 'localdb'로 하드 코드되어 있습니다.

대신 호스트, 포트 및 데이터베이스 이름이 포함 된 EmailProvider의 MONGOLAB_URI 환경 변수에 제공된 연결 정보를 사용하십시오.

이렇게하는 데는 여러 가지 방법이 있지만 첫 번째 코드 상자에서 EmailProvider 생성자로 연결 코드를 이동 한 다음 생성자를 변경하여 생성자 대신 URI를 사용하도록하는 방법이 있습니다. 호스트 및 포트. 그렇게하면 app.js의 생성자에 MONGOLAB_URI 변수를 전달할 수 있습니다.

관련 문제