2016-05-17 3 views
0

私は開発中のWebアプリケーションを持っています。私はCW Buechler's tutorialという単純な方法をとても便利にする方法を見つけましたが、実際の問題か無視できるかどうかを知りたいと思っています。エクスプレスミドルウェアでmonk/mongoを使用する効率的で正しい方法は何ですか?

自分のルートをデータベースに接続する方法は、チュートリアルのとおりです。

(app.js)では、このコードはデータベースをインスタンス化し、ミドルウェアを介して流れるすべてのreqオブジェクトに参照を添付します。

// wire up the database 
var mongo = require('mongodb'); 
var db = require('monk')('localhost:27017/StarChamber'); 

----------8<------- 

// Make our db accessible to our router 
app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

とミドルウェアでは、このように慣れる:

app.get('/', function (req, res) { 
    var db = req.db; 
    var collection = db.get('myCollection'); 
    // do stuff to produce results 
    res.json (results); 
}); 

だから、私のやっかいな悩みに:

  1. ルートにデシベルを渡すREQに取り付けることですかなり便利ですが、パフォーマンスに影響しますか?私が使用することができる私のルータファイルにそれへの参照を持つ方が良いでしょうか?これを行うコードは何ですか?
  2. コレクションは使用後に削除することをお勧めしますか?チュートリアルではそうしていませんが、ルートハンドラを終了する前にcollection.drop()コールが有益に見えます。それ以外の場合は、dbと多くのオープンな接続を構築するだけです。

ありがとうございました!

答えて

3
  1. いいえ、パフォーマンスには影響しません。 dbへの参照を渡すのは便利な方法ですが、Monkでは特に必要ないようです。別の設定については以下を参照してください。
  2. collectionsconnectionsを混同しています。前者はMongoDBのSQLの "tables"に相当するので、それらを削除することは基本的にデータベーステーブルのすべてのデータを捨てるので意味がないようです。コネクションに関して:インダイレクションのさまざまな層を通して、MonkはMongoDB Nodeの正式なドライバを使用しているように見えます。これは接続プールを使って接続自体を処理します。だから自分でそれを処理する必要はありません。周りのモンクのデータベースハンドルを渡す別の方法については

// database.js 
module.exports = require('monk')('localhost:27017/StarChamber'); 

そして、あなたはハンドルを必要とし、各モジュールで

は、あなたがそれをインポートすることができます:あなたは別のモジュールに配置することができます

var db = require('./database'); 
+0

多くのありがとうございます - 私が探していた情報です。 – VorpalSword

関連する問題