Не удается подключить приложение Node к Mlab (ошибка: неверный URL-адрес, не может быть проанализирован) - PullRequest
0 голосов
/ 01 мая 2018

Мой код:

require('dotenv').config();

var mongoose = require('mongoose');
var gracefulShutdown;
var dbURI = 'mongodb://localhost/Loc8r';


if (process.env.NODE_ENV === 'production') {
    dbURI = process.env.MONGOLAB_URI;
}

mongoose.connect(dbURI);

и после запуска NODE_ENV = production nodemon я получил эту ошибку

(node:10624) UnhandledPromiseRejectionWarning: Error: URL malformed, cannot be parsed

если я вручную установил dbURI, он прекрасно работает

dbURI = 'mongodb://<dbuser>:<dbpassword>@ds****.mlab.com:****/database' 

1 Ответ

0 голосов
/ 22 июня 2018

У меня та же проблема, не знаю, совпадает ли сценарий с вашим, но в основном у меня есть этот скрипт узла, который подключается к MongoDB через драйвер NodeJS (не Mongoose), и я запускаю этот скрипт через * NIX cron.

В любом случае, читая документы dotenv Я обнаружил, что на самом деле вы можете анализировать результаты конфигурации, выполнив что-то вроде этого:

const dotenv = require('dotenv')
const result = dotenv.config()
if (result.error) { throw result.error }
console.log(result.parsed)

Я сделал и выяснил, что мой сценарий предполагает, что мой файл .env находится у пользователя дома, а не в корне проекта (да, я запускаю это на AWS EC2). Ошибка довольно очевидна:

Error: ENOENT: no such file or directory, open '/home/ec2-user/.env'

Так что, да, убедитесь, что ваш файл .env доступен из каталога выполнения скрипта (в моем случае я выполняю скрипт из / home / ec2-user и мой корневой каталог проекта - / home / ec2-user / проект).

TL; DR: указать местоположение .env по абсолютному пути, например

require('dotenv').config({path: '/full/custom/path/to/your/.env'})
...