Что такое TransientTransactionError в Mongoose (или MongoDB)? - PullRequest
0 голосов
/ 03 сентября 2018

Итак, у меня есть два файла. Один - server.js, а другой - db.js. Файл db.js взаимодействует с моим БД с помощью Mongoose, и я использую server.js для вызова функций из db.js

.
db.js :
var mongoose = require('mongoose');
mongoose.connect('', { useNewUrlParser: true })
var Schema = mongoose.Schema;

module.exports = function () {
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    return db.once('open', function() {
        console.log("Connected to DB")
        var postschema = new Schema({
            title: String,
            intro: String,
            body: String,
            author: String,
            timestamp: { type: Date, default: Date.now }
        });

        var post = mongoose.model('post', postschema);

        return {
            newPost(title, intro, body, author) {
                var newpost = new post({
                    title: title,
                    intro: intro,
                    body: body,
                    author: author
                })
            },
            getPostsAll() {
                post.find({}, function (err, res) {
                    return (`Error:${err} Posts:${res}`)
                })
            }
        }
    })
}

И мой server.js вызывает три функции всего из db.js Это

var DB = require('./db.js')
var db = DB()
db.getPostsAll()
db.newPost()

Я не понимаю, почему я получаю эту ошибку:

connection error: { MongoNetworkError: connection 4 to black-test-shard-00-01-ewyaf.mongodb.net:27017 closed
at TLSSocket.<anonymous> (E:\HTML\black-box\node_modules\mongodb-core\lib\connection\connection.js:276:9)
at Object.onceWrapper (events.js:272:13)
at TLSSocket.emit (events.js:185:15)
at _handle.close (net.js:541:12)
at TCP.done [as _onclose] (_tls_wrap.js:379:7)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

Извините за тупой вопрос, но кто-нибудь может сказать мне, что здесь происходит? И что я делаю не так?

РЕДАКТИРОВАТЬ : Я нашел статью, связанную с этой проблемой: https://docs.mongodb.com/manual/core/transactions/#retry-transaction Но на самом деле ничего не могу из нее сделать.

EDIT 2 : обнаружена проблема. Это была проблема сети, так как она говорит MongoNetworkError, и я думаю, TransientTransactionError относится к некоторой временной проблеме на стороне базы данных. Я решил это, занеся в белый список мой IP-адрес.

Ответы [ 11 ]

0 голосов
/ 26 мая 2019

Вы можете прочитать об ошибке онлайн, но решение этой проблемы - : перейдите к атласу MongoDB и добавьте свой IP-адрес . Это будет работать просто отлично.

0 голосов
/ 10 июля 2019

Если у вас все еще есть эта ошибка, другая причина - вы забыли перезапустить сервер nodemon после изменения файла конфигурации. CTRL + C и начать снова, вот как я это решил.

0 голосов
/ 10 апреля 2019

Если вы используете MongoDB Atlas. Вам нужно внести белый список вашего IP-адреса в Atlas Console в настройках безопасности.

0 голосов
/ 16 апреля 2019

Если нет проблем с безопасностью, и вы просто делаете это для подключения: При настройке белого списка IP-адресов; формат должен быть 0.0.0.0/0, вы не столкнетесь с проблемой.

enter image description here

Более того, поскольку вы сами ответили, мы можем добавить IP-адрес, к которому нам нужен доступ.

0 голосов
/ 19 марта 2019

У меня была эта проблема при попытке подключить мое приложение Heroku к базе данных MongoDB Atlas.

Если вы делаете на своем терминале

heroku logs --tail

Вы можете увидеть

ERROR: { MongoNetworkError: 
connection 4 to cluster0-shard-40-01-qnwp8.mongodb.net:27017 closed
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }`

После внесения в белый список соединения с сервером в MongoDB Atlas ошибка соединения с базой данных была устранена.

0 голосов
/ 26 марта 2019

Для меня временная ошибка транзакции возникала всякий раз, когда я переключался со своей сети Wi-Fi на точку доступа своего телефона. Если это произойдет и с вами, перейдите на веб-сайт MongoDB, где вы создали свою базу данных, и снова внесите в белый список ваш текущий IP-адрес. Это решит вашу проблему.

0 голосов
/ 02 марта 2019

у меня было

  'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]:

Я добавил свой текущий IP в белый список, следуя "главной странице> раздел безопасности> доступ к сети> добавить IP" на веб-сайте MongoDB.

Надеюсь, это поможет.

0 голосов
/ 18 февраля 2019

Я столкнулся с этой ошибкой при запуске сценария populatedb.js в руководстве по MDN для Express / NodeJS.

Сценарий искал соединение БД, начинающееся с mongodb://, однако моя строка соединения от mongo началась с mongodb+srv://.

Я отредактировал скрипт, чтобы проверить этот синтаксис, что решило ошибку.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 24 января 2019

У меня была такая же проблема / ошибка, хотя на машине с Windows. Хотя я думал, что запустил службу mongodb, я не видел, чтобы она работала в службах Windows. Итак, я вручную запустил службу mongoDB внутри Служб, а затем ошибка исчезла. Надеюсь, это поможет!

0 голосов
/ 14 декабря 2018

У меня была похожая проблема ... Весь день я мог подключиться через мангуста. После этого я начал получать ошибку TransientTransactionError. Я мог подключиться к mongoDB через оболочку, так что я знал, что сервер работает и работает, как ожидалось.

IPv6 / локальный. Мой IP-адрес переключился с IPv4 на IPv6. Я решил проблему, отключив IPv6 и получив обычный IPv4 IP.

РЕДАКТИРОВАТЬ - кажется, я могу надежно воссоздать / создать эту проблему, подключившись к «localhost», в то время как мой сетевой адаптер настроен с IPv6 IP. Изменение localhost-> 127.0.0.1, кажется, решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...