【问题标题】:Mongoose Error when trying to connect to Mongo DB尝试连接到 Mongo DB 时出现 Mongoose 错误
【发布时间】:2020-04-26 04:16:33
【问题描述】:

所以我的问题是我正在尝试将我的应用程序连接到 Mongo DB 集合/数据库,但它无法连接。我在 .env 文件中有我的连接字符串和端口号,然后我将它导入到我的 app.js 文件中,我尝试在其中建立连接。

控制台日志中的错误:

throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
^
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.

.env 文件:

MONGO_URI=mongodb+srv://Admin:<Password>@cluster0-3t4ed.mongodb.net/test?retryWrites=true&w=majority
PORT=3000

app.js 文件:

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const morgan = require("morgan");
const dotenv = require("dotenv");
dotenv.config();

数据库:

mongoose.connect(process.env.MONGO_URI).then(() => {
  console.log("DB Connected");
});

mongoose.connection.on("error", err => {
 console.log(`DB Connection Error: ${err.message}`);
});

我已经把连接字符串放在引号里了,还是不行。

我已与 MongoDB 支持人员交谈过,但他们无法帮助我。

任何建议都会非常有帮助。

【问题讨论】:

  • 对于你的 .env:mongodb://username:password@localhost:portnum/dbName
  • 我得到了和以前一样的错误

标签: node.js mongodb express mongoose dotenv


【解决方案1】:

您收到此消息是因为在调用 mongoose.connect(process.env.MONGO_URI) 时,MONGO_URI 是 undefined。

解决方案是在您的应用程序中尽早调用dotenv.config()(请参阅dotenv documentation)。

// app.js
require("dotenv").config();
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const morgan = require("morgan");

【讨论】:

  • 我刚刚尝试了该选项,但不幸的是我仍然遇到同样的错误......
  • 确保 .env 文件位于您项目的根目录(带有 package.json)或配置文件到 dotenv 的 config() 的路径,即使您'重新使用 nodemon
【解决方案2】:

您可以尝试两件事。

首先,不要使用猫鼬。您可以使用 MongoDB 模块。 你可以使用

require('MongoDB').client;

在您的 .env 文件中,您实际上是否将您的用户名和密码放入了字符串中,或​​者确保您不包含

<>

在您的代码中

【讨论】:

    【解决方案3】:

    是的,如果有人想知道,我实际上已经弄清楚了。我进入我的 MongoDB 设置,然后进入数据库访问,并将我当前的 IP 地址添加到白名单中,它似乎可以工作。

    这也可能是我在连接代码中的一些有用设置:

    const options = {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useCreateIndex: true,
      useFindAndModify: false,
      autoIndex: false,
      poolSize: 10,
      bufferMaxEntries: 0,
      connectTimeoutMS: 0,
      socketTimeoutMS: 0,
      family: 4
    };
    mongoose
      .connect(key.MONGO_URI, options)
      .then(() => console.log("MongoDB Connected..."))
      .catch(err => console.log(err));
    

    .connect 方法中的“密钥”保存在另一个文件中,我将其导入到该文件中。

    【讨论】:

      【解决方案4】:
          // Create .env file 
          inside .env 
          MONGO_URI=mongo+src://username:password@cluster0......majority
          //
         // Inside app.js or server.js 
          const dotenv = require('dotenv')
          dotenv.config()
      
          const mongoose = require('mongoose')
      
          mongoose.connect(process.env.MONGO_URI, {
              useNewUrlParser: true,
              useUnifiedTopology: true
          });
          const db = mongoose.connection
          db.on('error', error => console.error(error))
          db.once('open', MONGO_URI => console.log('Connected to Database'))
      

      【讨论】:

      • 欢迎来到 SO 社区,鼓励您对您的代码可以帮助回答问题的内容进行一些解释
      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      【解决方案5】:

      此问题已处理here。我试过了,它奏效了。如果您将数据库名称从 test 更改为其他任何名称,您也可以考虑删除结尾的 ?retryWrites=true&amp;w=majority。

      【讨论】:

        【解决方案6】:

        检查您的代码中是否有两次 mongoose.connect 调用到不同的 URI。我就是这种情况。

        【讨论】:

          【解决方案7】:

          此问题已通过以下方式解决:

          1. 将 .env 文件放在项目的根目录下。与 package.json 文件所在的目录相同。
          2. 如果在 Heroku 等部署时出现此问题。在heroku 上,它查找在heroku 中声明的环境变量。因此,请遵循:
          3. 转到您的仪表板,然后在您选择的应用程序中转到设置选项卡。
          4. 转到 Config vars 并点击reveal vars。
          5. 只需在键值对中添加您的 .env 变量即可。
          6. 例如。将 MONGO_URI 放在 Key 中,将 mongodb+srv://Admin:@cluster0-3t4ed.mongodb.net/test?retryWrites=true&w=majority 放在 Value 中。 而已。您将能够部署您的应用,包括您的 .env 变量。

          【讨论】:

            【解决方案8】:

            connect,传参方式错误。 我认为这会奏效。 试试这个代码

            connect(`${process.env.MONGO_URL}`).then => () ~~ 
            

            【讨论】:

            • 你的代码里有3个s processs
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-20
            • 1970-01-01
            • 2014-08-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-12
            相关资源
            最近更新 更多