Node.js 无法将节点应用程序连接到Mlab(错误:URL格式错误,无法分析)

Node.js 无法将节点应用程序连接到Mlab(错误:URL格式错误,无法分析),node.js,mongodb,mongoose,mlab,Node.js,Mongodb,Mongoose,Mlab,我的代码: 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); 在运

我的代码:

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' 
dbURI='mongodb://:@ds****.mlab.com:***/database'

我遇到了同样的问题,不知道场景是否与您的相同,但基本上我有一个节点脚本,通过NodeJS驱动程序(无Mongoose)连接到MongoDB,我通过*NIX cron作业运行该脚本

无论如何,阅读我发现您实际上可以通过如下方式解析配置结果:

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/project)

TL;DR:通过绝对路径指定.env位置,如下所示

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

显然,蒙古拉乌里并不是你想象的那样。也许您应该实际检查它,即
console.log(process.env.MONGOLAB\u URI)
,然后当然检查环境变量实际所在的任何其他设置set@NeilLunn真的谢谢你。多亏了你的回答,我发现只有通过heroku配置才能设置MONGOLAB_URI。所以它可以在heroku上运行,但不能在我的电脑上运行