Как мне подключиться и переместить мою локальную базу данных mongoose в атлас облаков mongodb? - PullRequest
1 голос
/ 27 июня 2019

Когда я запускаю свой сервер, ошибка выглядела так:


Error in DB connection : Error: queryTxt ETIMEOUT yky-api-ajgvf.mongodb.net  

Я много раз пытался работать правильно, чтобы решить эту проблему. Я даже не мог правильно развернуть свой проект на Герою. Я очень люблю nodejs, но сейчас я просто хочу отказаться от постоянного изучения Nodejs.

Кто-то, если возможно, поможет мне решить мою проблему. Я тот, кто изучает Node.Js. Прошло около 4 или 5 месяцев. Раньше я решил использовать PHP, но сейчас я все еще пытаюсь изучить nodejs.

Я новичок. :)

Это код моей базы данных конфигурации в моем небольшом проекте.

const mongoose = require('mongoose')
const log = console.log

mongoose.connect('mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority', {
    useNewUrlParser: true
}, (err) => { 
    if (!err) {
        log('MongoDB Connection Succeeded.')
    } else {
        log('Error in DB connection : ' + err)
    }
});

require('../models/posts')

1 Ответ

0 голосов
/ 27 июня 2019

mongoose.connect() может выглядеть следующим образом ( ссылка на документ * ):

mongoose.connect(uri, options, function(error) {
  // Check error in initial connection. There is no 2nd param to the callback.
});

// Or using promises
mongoose.connect(uri, options).then(
  () => { /** ready to use. The `mongoose.connect()` promise resolves to mongoose instance. */ },
  err => { /** handle initial connection error */ }
); 

Перед дальнейшей демонстрацией, прежде всего, ваш блок является неправильным :

if (!err) {
        log('MongoDB Connection Succeeded.')
    } 

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

Вместо этого используйте блок .then () , так как успешное соединение возвращает Обещание:

mongoose.connect(uri, options).then(
  () => { console.log('MongoDB Connection Succeeded.') },
  err => { console.log(err) }
); 

// OR use .catch() after .then()

mongoose.connect(uri, options).then(() => console.log('MongoDB Connection Succeeded.')).catch( err => console.log(err))


Ваш ответ: setsocketTimeoutMS до 60000 или 90000.
Если все еще не работает, добавьте connectTimeoutMS=90000 и reconnectTries=1000 к options.


Объявите новую переменную с именем options (имя является произвольным, но лучше следовать соглашению), и вы также указываете useNewUrlParser: true ( ссылка ):

const options = {
   useNewUrlParser: true,
   socketTimeoutMS: 60000 //or 90000
 }

Совет: Вы можететакже укажите параметры драйвера в строке подключения в качестве параметров в части строки запроса URI ( ссылка ):

{main-url}?socketTimeoutMS=90000, то есть:

const uri = mongodb+srv://chanlay:chanlay123@yky-api-ajgvf.mongodb.net/yky-blog-api?retryWrites=true&w=majority?socketTimeoutMS=90000

но придерживайтесь переменной options, так как она чище, более читабельна и проще в обслуживании (в противном случае вы поместите все в строку, что затруднит чтение и отладку).

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

...