2017-02-22 1 views
0

에 걸쳐 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 = 데이터베이스; ~ db = 데이터베이스; app.locals.db = 데이터베이스;

var db = req.app.locals.db; 

그래서 지금 판독 :

및 outside.js 위해 줄을 추가 VAR의 DB = req.app.locals.db; collection = db.collection ('pages');

이것은 작동하지만 다른 게시물에서 언급했듯이이 연결을 다시 사용하는지 새 연결을 열 것인지 또는 연결 풀을 올바르게 사용하는지 확실하지 않습니다. 내가 프로젝트에서 무슨 짓을

답변

0

는 다음을이었다

- 별도의 I가 원할 때마다 "INIT-mongoose.js"연결 -Require

const connection = mongoose.connect("mongoURL") 
module.exports = connection 

라는 별도의 js 파일에 연결 사용이이 모델의 장점

const connection = include('libs/init-mongoose.js') 

하나는 코드의 한 부분에서 연결을 종료해야하는 경우,이 연결을 공유하는 코드의 모든 부분 가까이를 가질 것입니다 디. 내 경우에는 내가 하나의 호출로 여러 nodejs 배치 스크립트를 실행하고 마지막 스크립트

의 연결을 닫을 필요했다 당신이 모든 파일에 연결없이 그것을 할 수도 있습니다 내 대답은 도움이

+0

감사 사용할 수 있습니다. 기존의 연결 및 연결 풀을 응용 프로그램에서 사용합니까? 아니면 사용할 때마다 새로운 연결을 열지 않습니까? –

+0

응용 프로그램 전체에서 연결을 사용했습니다. 내 대답이 유용하다면,/upvote를 수락하십시오;) –

+0

감사합니다 이스라엘. 나는 네 대답을 upvoted. 나는 이것에 처음이에요. 내가 이것을 받아들이 기 전에 이것이 가장 좋은 대답이라고 말하는 것보다 더 많이 knowledgable 인 다른 사람들의 의견을 기다리는 것이 좋습니다. –

0

이었다 바랍니다. 글로벌

global.connection = mongodb.MongoClient.connect('mongodb://localhost/mysite',function(err,database) { 
    if(err) throw err; 

    db = database; 

    app.listen(3000); 
    console.log('Listening on port 3000'); 
}); 

에 연결 변수를 저장하고 당신은

router.get('/', function(req, res) { 
    global['collection'] = db.collection('pages'); 
    global['collection'].find({}, function(err, data) { 
     if(data) { 
      res.send('outside worked'); 
     }else { 
      console.log('oops'); 
     } 
    }); 
}); 
+0

감사합니다. Ashish. 이것은 전역 변수와 로컬 변수를 사용하는 것에 대해 내 게시물에서 언급 한 내용과 유사합니다. 전역 변수를 사용할 때 단점이 있습니까? –

+0

네, 단점이있을 수 있습니다. 이 솔루션에서이 연결 변수는 항상 활성화되고 메모리 유닛의 공간을 차지하므로 앱을 다시 시작합니다. 작은 값이나 데이터를 저장해도 많은 영향을 미치지 않지만 많은 양의 데이터를 저장하면 컴퓨터의 메모리 공간이 줄어 듭니다. –