Nodejs with koa and Mongo - MongooseError: You can not `mongoose.connect()` multiple times while connected

Nodejs with koa and Mongo - MongooseError: You can not `mongoose.connect()` multiple times while connected

我在带有 koa 的 nodejs 中的 aws 机器中有一个应用程序,这个应用程序与另一台 aws 机器上的 mongodb 连接。我得到的错误是 MongooseError: You can notmongoose.connect()multiple times while connected. 我也是 运行 带有 pm2

的应用程序

这是连接到数据库的代码:

    const mongoose = require('mongoose');
const { transform } = require('koa-bootstrap-service/lib/plugins');
const url = require('url');

const config = require('../../config/index');

mongoose.Promise = Promise;

function makeMongoUrl() {
    const dbSettings = config.mongoDb;
    if (!dbSettings) {
        return false;
    }

    if (dbSettings.url) {
        return dbSettings.url;
    }

    const urlObj = {
        hostname: dbSettings.host,
        port: dbSettings.port,
        pathname: `/${dbSettings.db}`,
        query: dbSettings.options,
        protocol: 'mongodb',
        slashes: true,
    };
    if (dbSettings.username) {
        urlObj.auth = `${dbSettings.username}:${dbSettings.password || ''}`;
    }
    return url.format(urlObj);
}

function connectMongoDb() {
    mongoose.plugin(transform.middleware());
    mongoose
        .connect(makeMongoUrl(), {
            useNewUrlParser: true,
            useCreateIndex: true,
            useFindAndModify: false,
            keepAlive: 1,
            connectTimeoutMS: 30000,
            reconnectTries: 30,
        })
        .then(() => {
            global.Logger.debug('Mongoose Connected');
        })
        .catch(({ stack }) => {
            global.Logger.error(stack);
            process.exit(0);
        });
}

connectMongoDb();

引用:

In mongoose version 5.6.1 the check was added https://github.com/Automattic/mongoose/pull/7905

Revert to an older version for a quick fix.


如果在 package.json 中,mongoose 版本是这样的:^5.x.y 然后插入符号 ^ 将使其更新到最近的 minor 版本,即最高 x (像 5.9.y 但不是 6.x.y)。
所以必须强制使用旧版本。


更新: 根据这个答案:

必须删除任何控制器文件中的任何其他连接,只有主文件能够建立连接。