我从GitHub下载了一些代码,以在我的机器上本地运行并试用它。这是第一次下载或使用MongoDB。我按照说明从this website下载MongoDB。然后,确保使用sudo service mongod start
命令启动MongoDB。
启动后,我将使用node application.js
命令运行从GitHub下载的项目。我收到错误消息:
throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
从我所看到的,我下载的代码具有以下连接语句:
mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }, function (err) {
if (err) {
console.log("connection error:", err);
} else {
console.log("MongoDB connection successful");
}
});
我似乎找不到MONGO_URL
。进行一些谷歌搜索,我看到很多人提到流星,但是我没有使用它。从我收集的数据来看,这是MongoDB用于连接到我的计算机上运行的本地数据库的路径。但是,未在项目中或安装过程中的任何地方设置该值。
我的理解正确吗?听起来我需要在Linux机器上定义一个新的环境变量。该变量应设置为什么?我计划仅出于学习目的在计算机上运行此项目。
谢谢大家的帮助!
答案 0 :(得分:1)
如果您的数据库位于本地计算机上,则需要这样做,
mongoose.connect('mongodb://localhost:27017/myapp', {useNewUrlParser: true});
如果计算机连接失败,请尝试使用127.0.0.1代替localhost。
答案 1 :(得分:1)
mongoose.connection()
需要3 values
Connection.prototype.openUri = function(uri, options, callback) {
…
};
抛出新的MongooseError('
uri
的{{1}}参数必须是'+ MongooseError:openUri()
的{{1}}参数必须是字符串,为“未定义” 。确保uri
或openUri()
的第一个参数是字符串
根据错误消息的建议,您传递的mongoose.connect()
就是mongoose.createConnection()
。如果您没有价值,就会发生这种情况。
能否请您记录uri
的值并查看该值。
undefined
安装完mongo数据库后,默认情况下它将在process.env.MONGO_URL
网址中运行。
您可以考虑传递诸如环境值之类的值,而不是对连接网址进行硬编码
如果只有一个环境值,则可以随安装一起传递
console.log(‘Connection url => ’, process.env.MONGO_URL);
如果每个应用程序有2-3个以上的环境变量,或者每个都使用环境变量的多个应用程序,它会很快用太多值污染环境。您可以使用dotenv通过mongodb://localhost:27017
文件进行配置
安装dotenv。在项目的根目录和ignore it in .gitignore
MONGO_URL=mongodb://localhost:27017 node index.js
文件
.env
.env
在您的代码中
.env
我们正在对stricly separate config from code进行此操作,这将有助于我们避免将敏感细节检入GitHub
您可以查看a sample project在上面configured处的详细信息。
答案 2 :(得分:0)
请参阅我的答案HERE,我正在使用jest-mongodb,而我的问题是试图在globalSetup
中使用尚未初始化的环境变量。