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 № 1Mam 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"})