Что такое MONGO_URL и для чего его нужно установить? - PullRequest
0 голосов
/ 10 апреля 2019

Я скачал некоторый код с 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.log("connection error:", err);
    } else {
        console.log("MongoDB connection successful");
    }
});

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

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

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

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

throw new MongooseError ('Параметр uri в openUri() должен быть' + MongooseError: Параметр uri для openUri() должен быть строкой, получившей "undefined" . Убедитесь, что первый параметр для mongoose.connect() или mongoose.createConnection() является строкой

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

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

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

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

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

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

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

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

Install dotenv .Создайте файл .env в корне проекта и проигнорируйте его в .gitignore

.env

MONGO_URL=mongodb://localhost:27017

В вашемкод,

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

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

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

1 голос
/ 10 апреля 2019

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

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

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

...