横切るMongoDBの接続を永続与えられる以下app.jsコード:すべてのNode.jsルータモジュール
var express = require('express');
var app = express();
var mongodb = require('mongodb');
var db = null;
mongodb.MongoClient.connect('mongodb://localhost/mysite', function(err, database) {
if(err) throw err;
db = database;
app.listen(3000);
console.log('Listening on port 3000');
});
var outside = require('./outside');
app.use('/outside', outside);
app.get('/inside', function(req, res) {
collection = db.collection('pages');
collection.find({}, function(err, data) {
if(data) {
res.send('inside worked');
}else {
console.log('oops');
}
});
});
とoutside.jsコードは次のように
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
collection = db.collection('pages');
collection.find({}, function(err, data) {
if(data) {
res.send('outside worked');
}else {
console.log('oops');
}
});
});
module.exports = router;
"var db = null"と表示されている場合、アプリにローカルであり、内部ルートが実行されているときに利用可能ですが、外部ルートでは使用できません。
"db = null"を使用してグローバルにすると、両方のルートで使用できます。私はそれが正しい/最もエレガントな方法であるかどうかはわかりません。もしそうなら、私に知らせてください。そうでなければ、より良い方法を教えてください。私は新しい接続を毎回作成したくないと思っています。プールの利点を利用したいと思っています。他の同様の投稿にコメントパー
、私はapp.jsに行を変更:
デシベル=データベース; 〜 db =データベース。 app.locals.db = database;
とoutside.jsに行を追加:
var db = req.app.locals.db;
をので、今読み出し: VARのDB = req.app.locals.dbと、 コレクション= db.collection( 'pages');
これはうまくいきますが、他の投稿に記載されているように、接続を再利用するか新しいものを開くか、接続プールを正しく使用するかどうかはわかりません。私はこのプロジェクトでやったことは以下の通りであった
おかげで使用することができます。既存の接続と接続プールをアプリケーション全体で使用するか、使用するたびに新しい接続を開きますか? –
アプリケーション全体で接続を使用しました。私の答えが役に立つなら、/ upvote;を受け入れてください) –
ありがとうイスラエル。私はあなたの答えをupvoted。私はこれに新しいので、私はこれを受け入れる前にこれが最善の答えであると言うよりも知識が豊富な人からのコメントを待つのは大丈夫ですか? –