我的应用程序中有mongoDB。
我想在收听应用程序之前检查mongoDB是否已连接。
这是最好的方式吗?
这是我的server.js文件:
var express = require('express');
var mongoDb = require('./mongoDb');
var app = express();
init();
function init() {
if (mongoDb.isConnected()) {
app.listen(8080, '127.0.0.1');
}
else {
console.log('error');
}
}
isConnected
运行getDbObject
。
getDbObject
连接到mongoDB并返回一个对象:
connected(true / false),db(dbObject或error)。
然后,isConnected
通过连接属性解析/拒绝。
这是mongoDb.js文件:
//lets require/import the mongodb native drivers.
var mongodb = require('mongodb');
// Connection URL. This is where your mongodb server is running.
var url = 'mongodb://localhost:27017/myDb';
var connectingDb; // promise
//We need to work with "MongoClient" interface in order to connect to a mongodb server.
var MongoClient = mongodb.MongoClient;
init();
module.exports = {
isConnected: isConnected
}
// Use connect method to connect to the Server
function init() {
connectingDb = new Promise(
function (resolve, reject) {
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
reject(err);
}
else {
console.log('Connection established to', url);
//Close connection
//db.close();
resolve(db);
}
});
}
);
}
function getDbObject() {
return connectingDb().then(myDb => {
return {
connected: true,
db: myDb
}
}
)
.catch(err => {
return {
connected: false,
db: err
}
}
)
}
function isConnected() {
return new Promise(
function(resolve, reject) {
var obj = getDbObject();
if (obj.connected == true) {
console.log('success');
resolve(true);
}
else {
console.log('error');
reject(false);
}
}
)
}
任何帮助表示赞赏!
答案 0 :(得分:7)
有多种方法取决于数据库的配置方式。对于独立(单个)实例。你可以使用这样的东西
Db.connect(configuration.url(), function(err, db) {
assert.equal(null, err);
如果您有配置服务器和多个分片的共享环境,则可以使用
db.serverConfig.isConnected()
答案 1 :(得分:6)
从 3.1 版开始,MongoClient 类具有 isConnected 方法。见https://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#isConnected
示例:
const mongoClient = new MongoClient(MONGO_URL);
async function init() {
console.log(mongoClient.isConnected()); // false
await mongoClient.connect();
console.log(mongoClient.isConnected()); // true
}
init();
答案 2 :(得分:1)
让client
是从MongoClient.connect返回的对象:
let MongoClient = require('mongodb').MongoClient
let client = await MongoClient.connect(url ...
...
这是我检查连接状态的方法:
function isConnected() {
return !!client && !!client.topology && client.topology.isConnected()
}
这适用于驱动程序3.1.1版。 找到了here。