我是编程新手,我正在阅读“ geting MEAN”一书。不幸的是,有关MONGODB和HEROKU的部分使用MLAB,而我想使用AtlasMongoDB。 所以,我连接数据库的代码是
const mongoose = require ('mongoose');
let dbURI = 'mongodb://localhost/Loc8r';
if (process.env.NODE_ENV === 'production') {dbURI = process.env.MONGODB_URI;
}
mongoose.connect(dbURI, { useNewUrlParser: true, useCreateIndex: true});
当我在本地启动声明PROCESS.ENV.NODE_ENV和MONGODB_URI的代码时,该应用程序可以很好地连接到数据库(下面的代码)
NODE_ENV=production MONGODB_URI='mongodb+srv://username:password@cluster0-jbcwd.azure.mongodb.net/Loc8r?retryWrites=true&w=majority' nodemon
当我将应用程序部署到Heroku时,收到以下错误
2019-10-03T21:34:53.253779+00:00 app[web.1]: /app/node_modules/mongoose/lib/connection.js:520
2019-10-03T21:34:53.253781+00:00 app[web.1]: throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
2019-10-03T21:34:53.253783+00:00 app[web.1]: ^
2019-10-03T21:34:53.257066+00:00 app[web.1]: Error [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.
我在Heroku中声明了两个变量(node_env等于生产且mongodb_uri等于mongodb + srv:// username:password@cluster0-jbcwd.azure.mongodb.net/Loc8r?retryWrites = true)
能帮我吗? 我意识到,启动nodemon声明不带引号的MONGODB_URI也会产生错误(如下)。
NODE_ENV=production MONGODB_URI=mongodb+srv://username:password@cluster0-jbcwd.azure.mongodb.net/Loc8r?retryWrites=true&w=majority nodemon
可能是引起问题的类似原因吗? 我知道我对此很不好,所以请不要刻薄
答案 0 :(得分:0)
对不起,我找到了解决方案,但是我想把它发布出来,因为我看到很多人都遇到同样的问题。当您通过终端在Heroku上创建变量时,由于某种原因,它将用大写字母写密钥NOT,这与上面的代码有所不同。 登录heroku网站并以大写字母添加变量就成功了!