Вопрос или проблема
Я пытаюсь подключиться к 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, если вы используете облачные решения.
Обратите внимание на важность точной настройки окружения, что критически важно для бесперебойной работы ваших приложений. Успехов в разработке!