Nodejs с koa и Mongo - MongooseError: Вы не можете `mongoose.connect ()` несколько раз при подключении - PullRequest
1 голос
/ 28 июня 2019

У меня есть приложение на машине aws в nodejs с koa, и это приложение соединяется с mongodb на другой машине aws.Я получаю сообщение об ошибке: 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 голосов
/ 28 июня 2019

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

Цитировать:

В версии 5.6.1 для mongoose добавлен чек https://github.com/Automattic/mongoose/pull/7905

Вернитесь к более старой версии для быстрого исправления.


Если в package.json версия mongoose выглядит следующим образом: ^5.x.y, то символ ^ обновит ее до последней minor версии, то есть до самый высокий x (например, 5.9.y, но не 6.x.y).
Таким образом, нужно заставить старую версию.


ОБНОВЛЕНИЕ: согласно этому ответу: https://stackoverflow.com/a/56816168/11330560

Необходимо удалить все другие соединения в любых файлов контроллера , при этом только основной файл может установить соединение.

...