Node.js 如何使用mongoose.connect检查mongodb连接期间是否存在db?

Node.js 如何使用mongoose.connect检查mongodb连接期间是否存在db?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我尝试使用mongoose.connect检查数据库是否存在 mongoose.connect("mongodb://localhost:27017/notexistdb",function(err){ if(err) console.log(err); }); 回调不包含错误消息,因此如何确定数据库是否存在。您可以尝试使用open和error事件查看是否可以连接到数据库。如果你能连接到它,那么它就存在了。如果你不能,那么它就不能 var mongoose = require('mo

我尝试使用mongoose.connect检查数据库是否存在

mongoose.connect("mongodb://localhost:27017/notexistdb",function(err){
     if(err) console.log(err);
});

回调不包含错误消息,因此如何确定数据库是否存在。

您可以尝试使用
open
error
事件查看是否可以连接到数据库。如果你能连接到它,那么它就存在了。如果你不能,那么它就不能

var mongoose = require('mongoose');

mongoose.connection.on('open', function (ref) {
  console.log('Connected to Mongo server...');
});
mongoose.connection.on('error', function (err) {
  console.log('Could not connect to Mongo server...');
  console.log(err);
});

mongoose.connect('mongodb://localhost:27017/notexistdb',function(err){
 if(err) console.log(err);
});

您可以通过获取数据库列表轻松找到

var mongoose = require('mongoose')
    , Admin = mongoose.mongo.Admin;

/// create a connection to the DB    
var connection = mongoose.createConnection(
    'mongodb://user:pass@localhost:port/database');
connection.on('open', function() {
    // connection established
    new Admin(connection.db).listDatabases(function(err, result) {
        console.log('listDatabases succeeded');
        // database list stored in result.databases
        var allDatabases = result.databases;    
    });
});

如果要返回答案,需要使用
desync

使用npm i desync安装
desync

您还可以通过导出其他文件在其中使用以下函数

const mongoose = require("mongoose");
var Admin = mongoose.mongo.Admin;
const deasync = require("deasync");

function checkDatabase (dbName) {
  var check; // we will return this value
  var uri = "mongodb://localhost:27017/";

  // connect with mongoDB
  mongoose.connect(uri, {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true})
    .then(() => {
      new Admin(mongoose.connection.db).listDatabases((err, result) => {
        var allDatabases = result.databases;
        check = allDatabases.some((database) => database.name === dbName);
      });
    })
    .catch((err) => {
      console.log("some error occured");
    });

  // wait while mongoose executes the result
  while (check == null) {
    deasync.runLoopOnce();
  }

  return check; // either true or false
};

我们需要使用
desync
,因为节点的许多功能都是异步的。要了解更多信息:

这可能会有所帮助。它似乎对我不起作用,不会返回任何错误消息。mongoose.connect似乎只是检查你的应用程序是否可以连接到服务器,比如说
localhost:27017
,而不是检查特定数据库的存在。同样,在这里,我发布了一个稍微不同的问题。。它不检查数据库是否存在。有什么解决办法吗?