Пытаюсь подключиться к mongodb Atlas с помощью nodeJs

Я работаю над небольшим проектом (REST API) с использованием nodeJs + MongoDB. Я смог установить MongoDB локально и подключиться к нему с помощью mongoose. Однако по какой-то причине, когда я пытаюсь подключиться с помощью MongoDB Atlas, это не удается. Похоже, что он подключается, но через 2 секунды я получаю сообщение об ошибке с сообщением о закрытых сокетах (см. Ошибку ниже). Я понятия не имею, что происходит. Я внес свой белый список в свой IP-адрес, проверил мою регистрационную информацию, чтобы убедиться, что я использую правильный пароль, и я действительно использую его, потому что я могу подключиться с помощью компаса MongoDB. Любая помощь с благодарностью.

 My current local ENV package versions are:
    nodeJs:V9.7.1
    mongoose:V6.1

=== MongoDb Atlas ===
    mongodb:3.6

Ниже приведен код, который я использую для подключения к базе данных:

var express = require('express'),
port = process.env.PORT || 3000,
mongoose = require('mongoose'),
user = require('./api/models/userModel'), 
config = require('./api/config');
bodyParser = require('body-parser');

var authRoutes = require('./api/routes/authRoutes'),
userRoutes = require('./api/routes/userRoutes'),
reviewRoutes = require('./api/routes/reviewRoutes');

const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://user:myPass@cluster0-shard-00-00 zd6jq.mongodb.net/myDb');

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

//Swagger Info
var options = {
    explorer : true
};

app.use('/swagger', swaggerUi.serve, swaggerUi.setup(swaggerDocument, options));
//END Swagger Info

//REGISTER ROUTES
userRoutes(app);
authRoutes(app);
reviewRoutes(app);

app.listen(port);

console.log('iReview RESTful API server listenning on port: ' + port);


module.exports = app;

==== СООБЩЕНИЕ ОБ ОШИБКЕ ===

    /Users/mdiez/node_test/node_modules/mongodb/lib/server.js:228
        process.nextTick(function() { throw err; })
                                      ^
MongoError: server cluster0-shard-00-00-zd6jq.mongodb.net:27017 sockets closed
    at Pool.<anonymous> (/Users/mdiez/node_test/node_modules/mongodb-core/lib/topologies/server.js:325:47)
    at Object.onceWrapper (events.js:219:13)
    at Pool.emit (events.js:127:13)
    at Connection.<anonymous> (/Users/mdiez/node_test/node_modules/mongodb-core/lib/connection/pool.js:101:12)
    at Object.onceWrapper (events.js:219:13)
    at Connection.emit (events.js:127:13)
    at Socket.<anonymous> (/Users/mdiez/node_test/node_modules/mongodb-core/lib/connection/connection.js:142:12)
    at Object.onceWrapper (events.js:219:13)
    at Socket.emit (events.js:127:13)
    at TCP._handle.close [as _onclose] (net.js:558:12)

1 ответ

Решение

var uri = 'mongodb://<usernamr>:<password>@<clustername>/<dbname>?ssl=true&replicaSet=<replica setname>&authSource=admin';

var db = mongoose.connect(uri).catch((error) => { console.log(error); });

Укажите имя набора реплик, ssl true и базу данных аутентификации. Это основано на ссылке из документации Atlas.

Вы можете использовать этот код для подключения к Компасу и Приложению. Вам просто необходимо следующее:

  1. замените все три первичных и вторичных шарда из Кластера -> Обзор
  2. замените natours-app именем своего кластера.

Компас: mongodb: // babar_bahadur:PASSWORD@natours-app-shard-00-00-ybksz.mongodb.net:27017,natours-app-shard-00-01-ybksz.mongodb.net:27017, natours-app- shard-00-02-ybksz.mongodb.net:27017/test?authSource=admin&replicaSet=natours-app1-shard-0&readPreference=primary&appname=MongoDB%20Compass&retryWrites=true&ssl=true

Приложение: mongodb: // babar_bahadur:PASSWORD@natours-app-shard-00-00-ybksz.mongodb.net:27017,natours-app-shard-00-01-ybksz.mongodb.net:27017, natours-app- shard-00-02-ybksz.mongodb.net:27017/test?ssl=true&replicaSet=natours-app-shard-0&authSource=admin&retryWrites=true

Другие вопросы по тегам