node.js - Heroku 连接 MONGODB 图集

标签 node.js mongodb heroku mongoose

我是编程新手,正在阅读《Getting 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 等于 Production,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

可能是类似的原因导致了这个问题吗? 我知道我在这方面很糟糕,所以请不要刻薄

最佳答案

抱歉,我找到了解决方案,但我想将其发布,因为我看到很多人都有同样的问题。当您通过终端在 Heroku 上创建变量时,由于某种原因,它不会以大写字母写入 key ,这与上面的代码不同。 登录heroku网站并以大写字母添加变量就成功了!

关于node.js - Heroku 连接 MONGODB 图集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58240316/

相关文章:

node.js - npm-request 不会发送到 fiddler

node.js - 无法弄清楚如何访问 Dice.com 的 REST API

node.js - 如何通过 id 从 Firestore 获取?

javascript - 异步/等待不等待 promise 完成

Mongodb 日期延迟 1 小时

arrays - 更新 mongodb 嵌套数组文档中的第 n 个文档

postgresql - 使用 Heroku CLI、Postgres 时出现 SQL 语法错误

MongoDB更新嵌套字段

java - Spring Boot 应用部署到 Heroku 与谷歌云 Mysql

postgresql - Heroku pgbackups :restore: an error occurred and your restore did not finish