Учитывая следующий app.js код:Упорно соединение MongoDB во все 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 = database; app.locals.db = database;
и добавил строку outside.js:
var db = req.app.locals.db;
так что теперь гласит: вар дБ = req.app.locals.db; collection = db.collection ('pages');
Это действительно работает, но, как упоминалось в другом сообщении, я не уверен, что это повторное использование соединения или открытие нового или если оно правильно использует пулы подключений.
Спасибо. Использует ли это существующее соединение и пул соединений в приложении или открывает новое соединение каждый раз, когда он используется? –
Он использовал соединение во всем приложении. Если бы мой ответ был полезен, пожалуйста, примите/повысьте;) –
Спасибо Израилю. Я поддержал ваш ответ. Я новичок в этом, так что нормально ждать некоторых комментариев от других, которые более осведомлены, чем я, говоря, что это лучший ответ, прежде чем я принимаю это? –