Я скачал некоторый код с 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. Что должно быть установлено в этой переменной? Я планирую запустить этот проект на своем компьютере только в учебных целях.
Спасибо всем за помощь!
К сожалению, это не сработало, но выдало значащую ошибку об имени базы данных, поэтому мне пришлось добавить /<db name>
в конце этого утверждения.
Если ваша база данных находится на локальной машине, вам нужно сделать,
mongoose.connect('mongodb://localhost:27017/myapp', {useNewUrlParser: true});
Если на вашем компьютере не удается подключиться, попробуйте использовать 127.0.0.1 вместо localhost.
Спасибо. Но должны ли эти переменные среды устанавливаться при загрузке MongoDB? Потому что я вижу ту же проблему с process.env.SESSION_SECRET
.
вы должны установить свои собственные переменные среды
mongoose.connection()
занимает 3 значения
Connection.prototype.openUri = function(uri, options, callback) {
…
};
throw new MongooseError('The
uri
parameter toopenUri()
must be a ' + MongooseError: Theuri
parameter toopenUri()
must be a string, got "undefined". Make sure the first parameter tomongoose.connect()
ormongoose.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, используя шаги, упомянутые в моем исходном сообщении.
если вы используете MONGO_URL=mongodb://localhost:27017 node index.js
, process.env.MONGO_URL
будет установлено на mongodb://localhost:27017
. Это потому, что mongodb работает на порту 27017 в локальном хосте.
Понял. Где бы я это установил? Должен ли я добавить его в свои переменные среды Linux?
@MB41 добавил подробности о том, где и как с одним из моих примеров проектов :)
Смотрите мой ответ ЗДЕСЬ, я использовал шутка-mongodb, и моя проблема заключалась в попытке использовать переменные среды в globalSetup
, когда они еще не инициализированы..
mongodb://localhost:27017