mongoDB, mon goose, не может подключиться к БД - PullRequest
1 голос
/ 16 марта 2020

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

keys.jss

module.exports = {
    mongoURI: 'mongodb+srv://john:<********>@mern-shopping-i5abd.mongodb.net/testretryWrites=true&w=majority'
};

Возможно, я следую устаревшему учебнику, поэтому некоторые вещи могут быть «ненужными»

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const app = express();

// Bodyparser Middleware
app.use(bodyParser.json());

// DB config
const db = require('./config/keys').mongoURI;

// Connect to Mongo
mongoose
    .connect(db, {useNewUrlParser: true} )
    .then(() => console.log('monogoDB Connected...'))
    .catch(err => console.log(err));

    const port = process.env.PORT || 5000;

    app.listen(port, () => console.log('Server started on port ${port}'));

Вместо отображения порта '5000' я получаю сообщение об ошибке (каждый раз разное)

  • сообщение: «3-й параметр для mongoose.connect() или mongoose.createConnection() должен быть функцией, получил« объект »», имя: 'MongooseError'

1 Ответ

1 голос
/ 16 марта 2020

Вот как это будет выглядеть с функцией обратного вызова вместо использования обещаний. Обратите внимание, что я также переместил запуск приложения в функцию обратного вызова. Это гарантирует, что приложение запускается только после успешного подключения к БД.

Я также переместил параметры БД (2-й параметр в методе подключения) в переменную. Таким образом, его легко найти и при необходимости можно изменить в одном месте. В идеале вы должны хранить всю конфигурацию вашей БД в одном файле и ссылаться на нее в других файлах по мере необходимости. Отдельные проблемы:)

const mongoose = require('mongoose');
const bodyParser = require('body-parser');

const app = express();

// Bodyparser Middleware
app.use(bodyParser.json());

// DB config
const db = require('./config/keys').mongoURI;
const dbOptions = {useNewUrlParser: true, useUnifiedTopology: true};

// Connect to Mongo
mongoose
  .connect(db, dbOptions, function(error) {
    // we had an error of some kind
    if (error) {
      console.error(error);

      // better yet, we don't want to app to run without our DB!
      throw error;
    }

    // If we made it here, no errors came up
    console.log('monogoDB Connected...');

    // Start up the app!
    const port = process.env.PORT || 5000;
    app.listen(port, () => console.log(`Server started on port ${port}`));
  });

Вот как это будет выглядеть со структурой обещания:

const express = require( "express" );
const mongoose = require( "mongoose" );
const bodyParser = require( "body-parser" );

const app = express();

// Bodyparser Middleware
app.use( bodyParser.json() );

// DB config
const db = require( "./config/keys" ).mongoURI;
const dbOptions = {useNewUrlParser: true, useUnifiedTopology: true};

// Connect to Mongo
mongoose
  .connect( db, dbOptions )
  .then( () => {
    console.log( "monogoDB Connected..." );

    // Start the application
    const port = process.env.PORT || 5000;
    app.listen( port, () => {
      console.log( `Server started on port ${port}` );
    } );
  } )
  .catch( err => {
    console.log( err );
    throw err;
  } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...