Включить подключение к mongodb с использованием сервера nodejs

Вопрос или проблема

Я пытаюсь подключиться к mongodb с помощью mongoose, но получаю ошибку подключения к MongoDB: MongoParseError: URI malformed

Я использую “mongoose”: “^7.8.2” и Node v22.11.0

require('dotenv').config();

module.exports = async () => {
    try {
        console.log(`ℹ  Попытка подключения к базе данных...`);

        const env = process.env.NODE_ENV || 'development';
        let mongoURI;

        if (env === 'development') {
            mongoURI = `mongodb+srv://${process.env.DEV_MONGODB_USERNAME}:${process.env.DEV_MONGODB_PASSWORD}@${process.env.DEV_MONGODB_HOST}/${process.env.DEV_MONGODB_DATABASE}?retryWrites=true&w=majority`;
        } else {
            mongoURI = `mongodb+srv://${process.env.PROD_MONGODB_USERNAME}:${process.env.PROD_MONGODB_PASSWORD}@${process.env.PROD_MONGODB_HOST}/${process.env.PROD_MONGODB_DATABASE}?retryWrites=true&w=majority`;
        }

        console.log(`🔗 Подключение к MongoDB...`);
        await mongoose.connect(mongoURI, {
            useNewUrlParser: true,
            useUnifiedTopology: true
        });
        console.log(`✅ MongoDB успешно подключен к базе данных ${env}`);
    } catch (error) {
        console.error('❌ Ошибка подключения к MongoDB:', error);
        console.error('Пожалуйста, проверьте ваш файл .env и убедитесь, что все учетные данные MongoDB корректны.');
        process.exit(1);
    }
};

Ответ или решение

Решение проблемы подключения к MongoDB с использованием Mongoose в Node.js

Ваша проблема с подключением к MongoDB через Mongoose, а именно ошибка MongoParseError: URI malformed, связана с некорректной формой URI для подключения к базе данных. В этом руководстве мы тщательно рассмотрим, как правильно настроить подключение к MongoDB и исправить возникшую ошибку.

1. Анализ кода подключения

Посмотрим на ваш текущий код для подключения к MongoDB:

require('dotenv').config();

module.exports = async () => {
    try {
        console.log(`ℹ  Attempting database connection...`);

        const env = process.env.NODE_ENV || 'development';
        let mongoURI;

        if (env === 'development') {
            mongoURI = `mongodb+srv://${process.env.DEV_MONGODB_USERNAME}:${process.env.DEV_MONGODB_PASSWORD}@${process.env.DEV_MONGODB_HOST}/${process.env.DEV_MONGODB_DATABASE}?retryWrites=true&w=majority`;
        } else {
            mongoURI = `mongodb+srv://${process.env.PROD_MONGODB_USERNAME}:${process.env.PROD_MONGODB_PASSWORD}@${process.env.PROD_MONGODB_HOST}/${process.env.PROD_MONGODB_DATABASE}?retryWrites=true&w=majority`;
        }

        console.log(`🔗 Connecting to MongoDB...`);
        await mongoose.connect(mongoURI, {
            useNewUrlParser: true,
            useUnifiedTopology: true
        });
        console.log(`✅ MongoDB connected successfully to ${env} database`);
    } catch (error) {
        console.error('❌ MongoDB connection error:', error);
        console.error('Please check your .env file and ensure all MongoDB credentials are correct.');
        process.exit(1);
    }
};

2. Причина ошибки

Ошибка MongoParseError: URI malformed скорее всего вызвана тем, что вы используете неправильный символ & в строке подключения. В URI для подключения к MongoDB параметры должны разделяться символом &, а не &. Данный символ обычно используется в HTML для представления амперсанта, но в данной ситуации он приводит к ошибке.

3. Исправление кода

Измените строки, создающие вашу строку подключения, следующим образом:

if (env === 'development') {
    mongoURI = `mongodb+srv://${process.env.DEV_MONGODB_USERNAME}:${process.env.DEV_MONGODB_PASSWORD}@${process.env.DEV_MONGODB_HOST}/${process.env.DEV_MONGODB_DATABASE}?retryWrites=true&w=majority`;
} else {
    mongoURI = `mongodb+srv://${process.env.PROD_MONGODB_USERNAME}:${process.env.PROD_MONGODB_PASSWORD}@${process.env.PROD_MONGODB_HOST}/${process.env.PROD_MONGODB_DATABASE}?retryWrites=true&w=majority`;
}

Обратите внимание на исправление & на &.

4. Проверка .env файла

Убедитесь, что все переменные окружения в вашем .env файле указаны корректно. Вот пример, как он может выглядеть:

DEV_MONGODB_USERNAME=myDevUsername
DEV_MONGODB_PASSWORD=myDevPassword
DEV_MONGODB_HOST=myDevHost
DEV_MONGODB_DATABASE=myDevDatabase

PROD_MONGODB_USERNAME=myProdUsername
PROD_MONGODB_PASSWORD=myProdPassword
PROD_MONGODB_HOST=myProdHost
PROD_MONGODB_DATABASE=myProdDatabase

5. Библиотеки и версии

Убедитесь, что вы используете актуальную версию mongoose, поддерживающую ваш контейнер Node.js. В момент написания, версия mongoose: ^7.8.2 и версия Node.js: 22.11.0 совместимы. Однако, всегда полезно проверить документацию Mongoose для получения актуальной информации о поддерживаемых версиях.

6. Заключение

После внесения указанных изменений ваше приложение должно корректно подключаться к MongoDB. Если проблемы продолжаются, перепроверьте ваши учетные данные и доступ к сети, а также проверьте дополнительные настройки MongoDB, такие как IP Whitelisting в Atlas, если вы используете облачные решения.

Обратите внимание на важность точной настройки окружения, что критически важно для бесперебойной работы ваших приложений. Успехов в разработке!

Оцените материал
Добавить комментарий

Капча загружается...