2015-05-27 80 views
0

我在推測一個簡單的任務時遇到了一些麻煩。我使用本地mongodb(2)驅動程序啓動express(4)應用程序,並研究如何打開與mongo server/db的連接一次,在express生命週期中重新使用它,並在快速應用程序關閉。通過nodejs Express應用程序持續的mongodb(2.0)連接

這裏是我到目前爲止(只顯示相關的片段):

var express = require('express'); 
var MongoClient = require('mongodb').MongoClient; 

var url = 'mongodb://localhost:27017/course'; 

// This cannot be the correct way to do this. 
// dbClient doesn't seem to be persisting the connection 
// details when connect(...) returns; 
var dbClient; 
MongoClient.connect(url, {native_parser: true}, function(err,db) { 
    if(err) throw err; 
    dbClient = db 
}); 

app.get('/', function(req, res) { 
    // 1) How do I access the MongoDB connection at this point? 
    //  Need a way to persist the connection and access it here.  
    // 2) How exaclty would I query a specific document here? 
    //  Should I be working with MongoDB 'collections' 
    //  and use that to find documents? 
    dbClient.find({}, function(err, doc) { 
     console.log(doc); 
     res.render('index', doc); 
    });  
}); 

app.listen(8000); 
console.log("Listening at http://localhost:8000"); 
+1

是,使用MongClient,你就必須選擇集合首先在你嘗試找到某物之前。 https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html –

+0

至於堅持連接,我不知道這是一個好主意或不。這將取決於連接是否一次處理多個請求,或者它是否像大多數其他數據庫系統一樣只處理一個請求。 –

回答

1

的MongoDB沒有內置的持久連接的支持。我會建議看看Mongoose。雖然Mongoose沒有持久連接,但它有連接池。這意味着不是每個重新連接的MongoDB要求它從重用連接池中的一個連接,然後返回它根據您的例子back.As:

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost:27017/'); 
var myModel = mongoose.model('course'); 

app.get('/', function(req, res) { 
    myModel.find({}, function(err, doc) { 
    console.log(doc); 
    res.render('index', doc); 
}); 
}); 
+0

謝謝你。我研究過Mongoose,雖然它是本地驅動程序的抽象,但我想通過使用本機驅動程序開始學習和利用Mongo與簡單的Web應用程序。如果這意味着我不能堅持一個連接,並且每次在我的應用程序中點擊一條路徑時都需要重新創建一個連接,那就沒問題。將其標記爲答案,因爲它似乎通過利用貓鼬每個請求的連接池來解決至少給出持續連接的感知的問題。 – mariocatch

相關問題