Mon goose Ошибка при попытке подключения к Mon go DB - PullRequest
0 голосов
/ 08 января 2020

, поэтому моя проблема в том, что я пытаюсь подключить свое приложение к коллекции / базе данных Mon go DB, и оно не подключается. У меня есть строка подключения и номер порта в файле .env, а затем я импортирую его в файл приложения. 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 file:

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

app. js file:

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, и они не могли мне помочь.

Любые предложения будут очень полезны.

Ответы [ 4 ]

0 голосов
/ 22 февраля 2020
    // 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'))
0 голосов
/ 08 января 2020

Есть две вещи, которые вы можете попробовать.

Прежде всего, вместо использования mon goose. Вы можете использовать модуль MongoDB. Вы можете использовать

require('MongoDB').client;

Second в вашем файле .env, если вы действительно введете свое имя пользователя и пароль в строку или убедитесь, что вы не включили

<>

в свой файл. код

0 голосов
/ 21 января 2020

Вы, на самом деле, поняли это, если кому-то интересно. Я вошел в настройки 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 сохраняется в другом файле, и я импортирую его в этот файл.

0 голосов
/ 08 января 2020

Вы получаете это сообщение, потому что MONGO_URI - это undefined, когда вызывается mongoose.connect(process.env.MONGO_URI).

Решение состоит в том, чтобы как можно раньше вызвать dotenv.config() в вашем приложении (см. dotenv документация ).

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