寻找在多个javascript文件中使用一个mongodb连接的最佳实践

Searching for best practice to use one mongodb connection in multiple javascript-files

本文关键字:mongodb 一个 连接 最佳 javascript 文件 寻找      更新时间:2023-09-26

目前,我用express开发了一个node.js REST web服务。我使用MongoDB + Mongoose建立数据库。现在,我有一个问题,我只能在我建立连接的文件中使用db连接。我找到了一个解决方案,通过"模块"在其他文件中使用连接。导出_db变量。但我不知道,这是不是最好的做法。下面是我的代码:

databaseManager.js

// Establish a connection to the database.
mongoose.Promise = global.Promise
mongoose.connect('mongodb://'+cfg.db.ip+':'+cfg.db.port+'/'+cfg.db.name)
var _db = mongoose.connection
_db.on('error', console.error.bind(console, 'DB connection error'))
_db.once('open', function() 
{
    console.log("DatabaseM: Connected to the database")
})
[...]
module.exports =
{
    db     :   _db,
}

otherFile.js

var database = require('./databaseManagement')
[...]
database.db.collection('users').findOne({ name: "ashton"}, function(err, user)
{
   if (err) return callback(consts.ERROR_DB, null)
   if (!user) return callback(consts.WARN_DB_NO_CLIENT)
   callback(null, user)
})

效果很好。但可能存在我看不出来的风险?非常感谢:-)

在你的app.js文件中:

var url="mongdb:''localhost:27017'dbname";
mongoose.connect(url); //it open default connection for mongodb and is handled by mongoose

现在执行你想要的所有任务:

mongoose.connection。On ('connected', function () {console.log('猫鼬默认连接打开' + dbURI);});

把所有的数据库模型放在app.js文件中,像这样:

var model1 = require('./models/model1');

model1.js

var mongoose = require('mongoose');
var data = new mongoose.Schema({
    name:{type:String, required:true}
});
module.exports = mongoose.model('collectionName', data);

现在,当你所有的任务都结束了。只需像这样关闭默认连接:

mongoose.connection.on('disconnected', function () { 
    console.log('Mongoose default connection disconnected'); 
});

如果连接出现错误,请这样处理:

mongoose.connection.on('error',function (err) { 
    console.log('Mongoose default connection error: ' + err);
});

如果节点服务退出,则使用以下代码关闭连接

process.on('SIGINT', function() { 
    mongoose.connection.close(function () { 
        console.log('Mongoose default connection disconnected through app termination'); 
        process.exit(0); 
    });
});