在所有node.js路由器模块

时间:2017-02-22 08:58:34

标签: node.js mongodb persist

给出以下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');

这确实有效,但正如其他帖子中所提到的,我不确定这是重用连接还是打开新连接或是否正确使用连接池。

2 个答案:

答案 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');
         }
     });
});