2013-05-21 8 views
7

मैं Express.js और MongoLab का उपयोग कर रहा हूं और मैंने Heroku setup to get MongoDB working का पालन किया है, इस कोड को मेरे app.js में फेंकने के उत्पादन में।मैं मोंगोलाब के साथ हरोकू पर मोंगोडीबी डेटाबेस कैसे स्थापित करूं?

//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('/') 
    }); 
}); 

यह सूचकांक पृष्ठ पर नया रूप renders और मुझे इसे स्थानीय स्तर पर सहेजने देता है लेकिन:

//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

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

हाय! ऐसा लगता है कि कुछ संदर्भ गायब हैं। आपका मोंगोडीबी कनेक्शन कोड ठीक दिखता है, लेकिन ईमेलप्रोवाइडर की परिभाषा क्या है? – robert

+0

@robert ठीक है, मैंने इसे और अधिक समझने योग्य बनाने के लिए संपादित किया है कि क्या हो रहा है। – Jryl

+1

क्या मैं सही ढंग से पढ़ रहा हूं कि आपका ईमेल प्रदाता स्थानीयहोस्ट से कनेक्ट हो रहा है: 27017? क्या आप इसे अपने मोंगोलाब डेटाबेस से कनेक्ट करने की कोशिश कर रहे हैं? – robert

उत्तर

6

पहले कोड बॉक्स में कनेक्शन कोड सही प्रतीत होता है, वहीं emailProvider वस्तु इसे प्रयोग नहीं कर रहा है । इसके बजाय, app.js में, ईमेलप्रोवाइडर को स्थानीयहोस्ट से जोड़ा जा रहा है: 27017 और डेटाबेस नाम को emailprovider.js में 'localdb' के रूप में हार्डकोड किया गया है।

इसके बजाय आप जो करना चाहते हैं वह आपके ईमेलप्रोवाइडर में MONGOLAB_URI पर्यावरण चर में प्रदान की गई कनेक्शन जानकारी का उपयोग करता है, जिसमें होस्ट, पोर्ट और डेटाबेस नाम पहले से ही है।

ऐसा करने के कई तरीके हैं, लेकिन एक ही तरीका है कि पहले कोड बॉक्स से अपने कनेक्शन कोड को ईमेलप्रोवाइडर कन्स्ट्रक्टर में ले जाएं, और उसके बाद कन्स्ट्रक्टर को बदलें ताकि यह यूआरआई को इसके बजाय ले जा सके मेजबान और बंदरगाह। इस तरह, आप app.js. में निर्माता को MONGOLAB_URI चर पारित कर सकते हैं।

संबंधित मुद्दे