2015-12-27 55 views
0

我正在使用node.js和mongoDB。現在,對於我的測試應用程序,與db的連接位於主節點文件中,但我認爲這是錯誤的做法。 我想要/需要什麼:一種安全的方式(即不在用戶可以訪問的文件上存儲密碼)在需要時連接到數據庫。使用節點來管理與mongoDB的連接的正確方法是什麼?

例如:我想幾個管理頁面(用戶,組等)。每個頁面都應該連接到數據庫,找到一些數據並顯示它。它還有一個向db添加文檔和刪除選項的窗體。

我想也許創建某種連接功能 - 發送你想做的事(添加,更新,查找,刪除)什麼,到了那裏(集合名稱)和任何需要。但是我不能僅僅包含這個函數,因爲那樣它會向db顯示密碼。那麼我能做什麼?

謝謝!

回答

2

我要去位回答你的問題位。


現在,我的測試應用程序,到數據庫的連接是主節點文件

這是好的,雖然你可能希望把它放在一個單獨的文件中更容易重用。 NodeJS是一個持續運行的過程,所以理論上你可以使用與數據庫相同的連接來服務所有的HTTP響應。實際上你想創建一個連接池,但NodeJS的Mongodb驅動已經自動完成了。


每個頁面應該連接到數據庫,找到一些數據,並顯示它。

當您在MongoDB驅動程序上發出查詢時,只要您在應用程序啓動時爲其提供憑據,它就會自動使用來自其內部連接池的連接。


我想要什麼/需要:以安全的方式(即不存儲上的文件的用戶可以訪問密碼)連接到需要的只是當分貝。

我會建議您在不提交給您的VCS的單獨文件中保留您的應用程序配置(取決於應用程序運行環境的任何變量)。像node-config這樣的模塊可以幫助您做到這一點。


你將結束,使用節點配置的代碼,是這樣的:

配置/ default.json:

{ 
    "mongo": null 
} 

這是默認的配置文件,該文件你承諾。

配置/本地。JSON:

{ 
    "mongo": "mongo://user:[email protected]:port/db" 
} 

的local.json應該由你的VCS被忽略。它包含祕密醬油。

connection.js:

var config = require('config'); 
var MongoClient = require('mongodb').MongoClient; 
var cache; 

module.exports = function(callback){ 
    if(cache){ 
    return callback(cache); 
    } 
    MongoClient.connect(config.get('mongo'), function(err, db){ 
    if(err){ 
     console.error(err.stack); 
     process.exit(1); 
    } 
    cache = db; 
    callback(db); 
    }); 
} 

的你可能會如何處理重複使用數據庫連接的殘缺例如。請注意如何使用config.get(*)獲取配置。一個實際的實現應該有更強大的錯誤處理並且防止多個連接被建立。使用Promises會使所有這一切變得更容易。

index.js:

var connect = require('./connection'); 
connect(function(db){ 
    db.find({whatever: true}) 
}); 

現在,你可以要求任何你想要你的數據庫文件,並再次使用同一數據庫連接,它可以處理池爲你和你沒有你的密碼硬 - 編碼在任何地方。

相關問題