无法将Node应用程序连接到Mlab(错误:URL格式错误,无法解析)

时间:2018-05-01 03:33:53

标签: 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);

并且在运行NODE_ENV =生产nodemon后我收到此错误

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

如果我手动设置dbURI,它可以正常工作

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

1 个答案:

答案 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'})