带有Koa和Mongo的Node.js-MongooseError:连接时不能多次使用mongoose.connect()

时间:2019-06-27 21:56:03

标签: node.js mongodb mongoose pm2 koa

我在带有koa的nodejs中的aws机器中有一个应用程序,并且此应用程序与另一台aws机器上的mongodb连接。我遇到的错误是MongooseError: You can not mongoose.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();

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/56760259/11330560

引用:

  

在猫鼬版本5.6.1中,检查已添加https://github.com/Automattic/mongoose/pull/7905

     

恢复为较早版本以进行快速修复。


如果在 package.json 中,猫鼬版本如下:^5.x.y,然后插入符号^将使其更新为最新的 minor 版本,即最高x(例如5.9.y而不是6.x.y)。
因此,必须强制使用旧版本。


更新:根据此答案:https://stackoverflow.com/a/56816168/11330560

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