尝试连接到Mongo DB时出现Mongoose错误

所以我的问题是我正在尝试将我的应用程序连接到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的支持人员进行了交谈,他们无法帮助我。

任何建议都会很有帮助。

hualuofengfei 回答:尝试连接到Mongo DB时出现Mongoose错误

您收到此消息是因为调用MONGO_URIundefinedmongoose.connect(process.env.MONGO_URI)

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

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

您可以尝试两种方法。

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

require('MongoDB').client;

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

<>

在您的代码中

,

是的,我真的想通了,以防万一有人想知道。我进入了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方法中的“键”保存在另一个文件中,并将其导入到该文件中。

,
    // 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'))
,

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

,

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

,

此问题已解决:

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

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

connect(`${process.env.MONGO_URL}`).then => () ~~ 
本文链接:https://www.f2er.com/2803338.html

大家都在问