我的代码:
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 =生产nodemon后我收到此错误
(node:10624) UnhandledPromiseRejectionWarning: Error: URL malformed, cannot be parsed
如果我手动设置dbURI,它可以正常工作
dbURI = 'mongodb://<dbuser>:<dbpassword>@ds****.mlab.com:****/database'
答案 0 :(得分:2)
我遇到了同样的问题,不知道这种情况是否与您的情况相同,但是基本上我有一个通过NodeJS驱动程序(没有Mongoose)连接到MongoDB的节点脚本,并且我通过一个*运行该脚本。 NIX cron工作。
无论如何,阅读dotenv docs后,我发现您实际上可以解析配置结果,例如:
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'})