代码之家  ›  专栏  ›  技术社区  ›  tschwab

多个节点模块中的一个mongo连接

  •  0
  • tschwab  · 技术社区  · 7 年前

    我正在尝试让我的所有节点模块共享一个Mongo连接,但在这样做时遇到了问题。我已经看过一些关于这方面的材料了。下面是主文件、Mongo helper文件和另一个尝试使用连接的文件。问题是,当路由文件尝试使用Mongo连接时, db 为空。

    Mongo帮助文件:

    var mongo = require('mongodb').MongoClient
    
    var _db
    
    function connect(callback) {
        const host = '---'
        const database = '---'
        const user = '---'
        const pass = '---'
        const uri = 'mongodb://' + user + ':' + pass + '@' + host + '/' + database
    
        mongo.connect(uri, (err, client) => {
            console.log('Connected to Mongo')
            _db = client.db(database)
            return callback(err)
        })
    }
    
    function db() {
        return _db;
    }
    
    module.exports = {
        connect: connect,
        db: db
    }
    

    主文件:

    var express = require('express')
    var app = express()
    var mongo = require('./helpers/mongo')
    mongo.connect((err) => {
        if (err !== null) {
            console.log("Error connecting to Mongo: " + err)
            process.exit()
        }
    })
    
    var problems = require('./routes/problems.js')
    app.use('/problem', problems)
    
    app.listen(3000)
    

    路由文件:

    var express = require('express')
    var router = express.Router()
    var db = require('../helpers/mongo').db()
    
    router.get('/stuff', (req, res) => {
        var problems = db.collection('problems')
        res.send('working correctly')
    })
    
    module.exports = router
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Govna    7 年前

    猫鼬呢?

    const mongoose = require('mongoose');
    
    // connect to the database (mongodb)
    mongoose.connect('mongodb:<host>/<db>', {useMongoClient: true});
    mongoose.promise = global.Promise;
    var db = mongoose.connection;
    
    // Check for DB connection
    db.once('open', function(){
      console.log('Connected to Mongo Db');
    });
    
    // Check for DB errors
    db.on('error', function(err){
      console.log(err);
    });