给出以下app.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"使其成为全球性的,它可用于两条路线。我不确定这是否是正确/最优雅的方式。如果是,请告诉我,否则让我知道一个更好的方法,考虑到我不想每次创建一个新连接,我想利用池,如此处其他类似帖子中所述。 / p>
根据其他类似帖子的评论,我更改了app.js中的行:
db = database; 至 db = database; app.locals.db = database;
并将该行添加到outside.js:
var db = req.app.locals.db;
所以它现在写着: var db = req.app.locals.db; collection = db.collection(' pages');
这确实有效,但正如其他帖子中所提到的,我不确定这是重用连接还是打开新连接或是否正确使用连接池。
答案 0 :(得分:0)
我在一个项目中所做的是以下内容:
- 在名为" init-mongoose.js"
的单独js文件中分隔连接const connection = mongoose.connect("mongoURL")
module.exports = connection
- 每当我想使用它时都需要连接
const connection = include('libs/init-mongoose.js')
此模型的一个优点是,如果您需要在代码的一部分中关闭连接,则共享此连接的所有代码部分都将关闭。在我的情况下,我通过一次调用运行了几个nodejs批处理脚本,需要在最后一个脚本中关闭连接
希望我的回答很有帮助
答案 1 :(得分: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');
}
});
});