/ / Problem z połączeniem aplikacji węzła z Mlab (błąd: źle sformułowany adres URL, nie można go przeanalizować) - node.js, mongodb, mongoose, mlab

Problemy z połączeniem aplikacji Node z Mlab (Błąd: URL źle sformułowany, nie można przeanalizować) - node.js, mongodb, mangusta, mlab

Mój kod:

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);

i po uruchomieniu NODE_ENV = Production Nodemon otrzymałem ten błąd

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

jeśli ręcznie ustawię dbURI, działa idealnie

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

Odpowiedzi:

0 dla odpowiedzi № 1

Mam ten sam problem, nie wiem, czy plikscenariusz jest taki sam jak twój, ale w zasadzie mam ten skrypt węzłowy, który łączy się z MongoDB przez sterownik NodeJS (bez Mongoose) i uruchamiam ten skrypt przez zadanie * NIX cron.

W każdym razie, czytając dotenv docs Dowiedziałem się, że możesz faktycznie przeanalizować wyniki konfiguracji, robiąc coś takiego:

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

Zrobiłem i okazuje się, że mój skrypt zakłada, że ​​mój plik .env znajduje się w domu użytkownika, a nie w katalogu głównym projektu (tak, uruchamiam to na AWS EC2). Błąd jest dość jasny:

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

Więc tak, upewnij się, że twój plik .env jest dostępny z katalogu wykonywania skryptu (w moim przypadku wykonuję skrypt z / home / ec2-user, a katalog główny mojego projektu to / home / ec2-user / project).

TL; DR: określ lokalizację .env za pomocą ścieżki bezwzględnej, w ten sposób

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