Что такое MONGO_URL и что для него нужно установить?

Я скачал некоторый код с GitHub, чтобы запустить его локально на своем компьютере и поиграть с ним. Это первая загрузка или работа с MongoDB. Я следовал инструкциям по загрузке MongoDB из этот сайт. Затем я убедился, что MongoDB запускается с помощью команды sudo service mongod start.

После запуска я запускаю проект, скачанный с GitHub, с помощью команды node application.js. Я получаю сообщение об ошибке:

throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.

Из того, что я вижу, код, который я скачал, имеет этот оператор подключения:

mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }, function (err) {
    if (err) {
        console.info("connection error:", err);
    } else {
        console.info("MongoDB connection successful");
    }
});

Не могу найти MONGO_URL. Немного погуглив, я вижу, что многие люди упоминают метеор, но я этого не использую. Из того, что я собрал, это путь, который MongoDB использует для подключения к локальной БД, работающей на моей машине. Однако это нигде не устанавливается ни в проекте, ни во время установки.

Правильно ли я понимаю? Похоже, мне нужно определить новую переменную среды на моей машине с Linux. Что должно быть установлено в этой переменной? Я планирую запустить этот проект на своем компьютере только в учебных целях.

Спасибо всем за помощь!

mongodb://localhost:27017
1565986223 10.04.2019 04:54

К сожалению, это не сработало, но выдало значащую ошибку об имени базы данных, поэтому мне пришлось добавить /<db name> в конце этого утверждения.

MB41 10.04.2019 05:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
12 861
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если ваша база данных находится на локальной машине, вам нужно сделать,

mongoose.connect('mongodb://localhost:27017/myapp', {useNewUrlParser: true});

Если на вашем компьютере не удается подключиться, попробуйте использовать 127.0.0.1 вместо localhost.

Спасибо. Но должны ли эти переменные среды устанавливаться при загрузке MongoDB? Потому что я вижу ту же проблему с process.env.SESSION_SECRET.

MB41 10.04.2019 05:20

вы должны установить свои собственные переменные среды

1565986223 10.04.2019 05:22
Ответ принят как подходящий

mongoose.connection() занимает 3 значения

Connection.prototype.openUri = function(uri, options, callback) {
    …
};

throw new MongooseError('The uri parameter to openUri() must be a ' + MongooseError: The uri parameter to openUri() must be a string, got "undefined". Make sure the first parameter to mongoose.connect() or mongoose.createConnection() is a string

Как следует из вашего сообщения об ошибке, uri, который вы передаете, оказывается undefined. Это происходит, если вы не имеете значения для него.

Не могли бы вы записать значение process.env.MONGO_URL и посмотреть значение.

console.info(‘Connection url => ’, process.env.MONGO_URL);

Поскольку вы установили mongo db, по умолчанию он будет работать в URL-адресе mongodb://localhost:27017.

Вместо жесткого кодирования URL-адреса подключения вы можете рассмотреть возможность передачи таких значений в качестве значений среды.

Если у вас есть только одно значение среды, вы можете передать его вместе с установкой

MONGO_URL=mongodb://localhost:27017 node index.js 

Если у вас есть более 2-3 переменных среды для каждого приложения или несколько приложений, использующих переменную среды, это может быстро загрязнить вашу среду слишком большим количеством значений. Вы можете использовать дотенв для их настройки с помощью файла .env

Установите дотенв. Создайте файл .env в корне проекта и игнорировать это в .gitignore

.env

MONGO_URL=mongodb://localhost:27017

В вашем коде

const dotenv = require('dotenv').config();
console.info(process.env.MONGO_URL); //you can access it straight way

Мы делаем это для строго отделить конфиг от кода, что поможет нам избежать проверки конфиденциальных данных на GitHub.

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

Я жестко закодировал путь в функции, как указано выше. Вы упомянули, что по умолчанию он должен работать, если установлен mongodb. Как и предполагалось, журнал консоли process.env.MONGO_URL не определен. Где и когда это должно быть определено? потому что я установил mongodb, используя шаги, упомянутые в моем исходном сообщении.

MB41 10.04.2019 20:16

если вы используете MONGO_URL=mongodb://localhost:27017 node index.js, process.env.MONGO_URL будет установлено на mongodb://localhost:27017. Это потому, что mongodb работает на порту 27017 в локальном хосте.

Sridhar 11.04.2019 05:29

Понял. Где бы я это установил? Должен ли я добавить его в свои переменные среды Linux?

MB41 11.04.2019 17:11

@MB41 добавил подробности о том, где и как с одним из моих примеров проектов :)

Sridhar 12.04.2019 05:53

Смотрите мой ответ ЗДЕСЬ, я использовал шутка-mongodb, и моя проблема заключалась в попытке использовать переменные среды в globalSetup, когда они еще не инициализированы..

Другие вопросы по теме