2012-05-02 37 views
5

Tôi đang thực sự bối rối về cách kết nối với MongoLab trên Heroku. Để kết nối bằng cách sử dụng uri để Heroku, tôi đã cố gắng để làm theo ví dụ này: http://experiencecraftsmanship.wordpress.com/2012/01/06/heroku-node-js-mongodb-featuring-the-native-driver/Làm cách nào để sử dụng nút-mongodb-native để kết nối với Heroku?

Tôi nhìn cả hai web.js và deep.js. mình Cả hai đều làm một cái gì đó như:

connect.createServer(
    require('connect-jsonrpc')(contacts) 
).listen(port); 

Nhưng sau đó chỉ truy vấn cơ sở dữ liệu trong 'địa chỉ liên lạc' được thông qua vào máy chủ này sau đó? Tôi có được phép thực hiện nhiều connect.createServer cho mỗi phương thức truy cập cơ sở dữ liệu của mình không?

Sau đây là một phần mã của tôi khi chỉ kết nối với MongoDB cục bộ. Tôi không chắc chắn về cách sửa đổi nó để kết nối với MongoLab trên Heroku.

Ai đó có thể dạy tôi cách sửa đổi mã của tôi để kết nối không? Hoặc giải thích một số khái niệm này? Tôi không biết tại sao tác giả của trang web tôi đăng lại sử dụng quá nhiều callback để thực hiện cuộc gọi cơ sở dữ liệu, khi cách tiếp cận của tôi dưới đây có vẻ đơn giản (tôi mới sử dụng JavaScript, không tốt với callback).

var app = module.exports = express.createServer(
    form({ keepExtensions: true }) 
); 

var Db = require('mongodb').Db; 
var Server = require('mongodb').Server; 
var client = new Db('blog', new Server('127.0.0.1', 27017, {})); 

var posts; 
var getAllPosts = function(err, collection) { 
    collection.find().toArray(function(err, results) { 
    posts = results; 
    console.log(results); 
    client.close(); 
    }); 
} 


app.get('/', function(req, response) { 
    client.open(function(err, pClient) { 
    client.collection('posts', getAllPosts); 
    }); 

    // some code 
    response.render('layout', { posts: posts, title: 'Raymond', contentPage: 'blog' }); 
}); 

Trả lời

2

Bạn kết nối với cơ sở dữ liệu mongolab của mình (để bạn không thể tạo cơ sở dữ liệu "blog" mới). process.env.MONGOLAB_URI cũng bao gồm tên cơ sở dữ liệu. Xem uri mongolab của bạn:

heroku config | grep MONGOLAB_URI 

Dường như: mongodb://heroku_app123456:[email protected]:27737/heroku_app123456

On github có an example how to connect and retrieve data from a mongolab database.

+0

Tôi đã nhìn vào ví dụ mà. Tôi có thể gọi connect.createServer (...) nhiều lần không? Bởi vì tôi xác định nhiều điểm cuối url yêu cầu quyền truy cập vào cơ sở dữ liệu. Tôi cũng không chắc chắn làm thế nào để vượt qua các thông số của riêng tôi từ các tham số url. –

+0

Bạn không cần tạoServer cho mọi điểm cuối url. Để xử lý các hoạt động cơ sở dữ liệu, bạn có thể tạo một loại Nhà cung cấp. Xem ví dụ về ["ArticleProvider" trên blog hướng dẫn-nút] (http://howtonode.org/express-mongodb) –

2

Sử dụng "connect" để kết nối với Mongo, thay vì quy định db, máy chủ, máy khách:

var connect = require('connect'); 
var mongo = require('mongodb'); 
var database = null; 

var mongostr = [YOUR MONGOLAB_URI]; 

mongo.connect(mongostr, {}, function(error, db) 
    {  
      console.log("connected, db: " + db); 

      database = db; 

      database.addListener("error", function(error){ 
      console.log("Error connecting to MongoLab"); 

      }); 
}); 
Các vấn đề liên quan