У меня есть server.js и db.js. Файл db.js взаимодействует с моей базой данных с помощью Mongoose, и я использую server.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.info("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)]: {} }
Что я делаю не так? Я нашел статья, но ничего не могу сделать.
@vibhorvaish Это мог быть ваш локальный IP-адрес.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


What is a TransientTransactionError
TransientTransactionError - это транзакционная ошибка, которая классифицируется как временная, и при повторной попытке май будет успешной. Более того, конфликт записи TransientTransactionError возникает перед фиксацией, когда не была произведена блокировка записи и транзакция (новые данные) не отражена в моментальном снимке транзакции (предыдущие данные). В результате эти ошибки полностью безопасны для повторной попытки, пока не произойдет это успешная фиксация.
Транзакции, которые повторяют попытку в этом сценарии, повторяются с начала транзакции.
Иметь ввиду Эта метка ошибки отличается от ошибок фиксации, которые происходят, когда блокировка была взята, но транзакция не может завершить свое фиксацию. Метка ошибки для этого - UnknownTransactionCommitResult. Ссылка на это примечательна из-за разницы в понимании того, где в вашем приложении возникает ошибка, и какова может быть основная причина и как приложение может и или будет реагировать из-за различных типов ошибок.
Если вы используете Драйверы, поддерживаемые MongoDB, есть две возможные причины, по которым код получает эту ошибку:
Пример кода в Транзакции MongoDB: повторная транзакция показывает, как обрабатывать TransientTransactionError.
Если сообщение об ошибке - MongoNetworkError, это означает, что временная ошибка транзакции связана с сетевым подключением между клиентом и сервером. Это может быть либо одноразовый сетевой сбой, который можно повторить, либо отсутствие доступа к сети, требующего настройки сети. Если ошибка возникает при первой попытке клиента получить доступ к серверу, вероятно, требуется конфигурация сети. Если сервер находится в MongoDB Atlas, см. Настроить записи белого списка.
Единственное, что я хотел бы добавить, это то, что ошибка transienttransactionerror - это попытка транзакции, которая не указана в моментальном снимке (предыдущие данные) и до взятия блокировки записи. Скорее всего, из-за ошибки сетевого подключения или конфликта записи. Думайте о конфликте записи как о чем-то, что не позволяет вам писать или брать блокировку записи из-за обстоятельств ... то есть до совершения любого вида фиксации.
У меня была аналогичная проблема ... Весь день я мог подключиться через мангуста. Затем я начал получать ошибку TransientTransactionError. Я мог подключиться к mongoDB через оболочку, поэтому я знал, что сервер работает должным образом.
IPv6 / локальный хост. Мой IP переключился с IPv4 на IPv6. Я решил проблему, отключив IPv6 и получив обычный IPv4 IP.
ИЗМЕНИТЬ - кажется, я могу надежно воссоздать / создать эту проблему, подключившись к «localhost», в то время как моя сетевая карта настроена с IPv6 IP. Изменение localhost-> 127.0.0.1, похоже, решает проблему.
Wat? Как ваш IP-адрес переключился с IPv4 на IPv6? : / Как ты "отключил IPv6"?
@Bloke - я получаю IPv6 IP, подключившись через мобильную точку доступа телефона. Я отключаю IPv6 с помощью sysctl (подробности см. В Google).
У меня была такая же проблема / ошибка, хотя и на компьютере с Windows. Хотя я думал, что запустил службу mongodb, я не видел, чтобы она работала в службах Windows. Итак, я вручную запустил службу mongoDB внутри служб, а затем ошибка исчезла. Надеюсь это поможет!
Я столкнулся с этой ошибкой при запуске сценария populatedb.js в учебнике MDN для Express / NodeJS.
Сценарий искал соединение с базой данных, начиная с mongodb://, однако моя строка подключения от mongo началась с mongodb+srv://.
Вместо этого я отредактировал сценарий, чтобы проверить этот синтаксис, что устранило ошибку.
Я надеюсь, что это помогает кому-то.
я имел
'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]:
Я добавил свой текущий IP-адрес в белый список после «главная страница> раздел безопасности> доступ к сети> добавить IP» на веб-сайте MongoDB.
Надеюсь, это поможет.
Это буквально решило указанную выше ошибку. Огромное спасибо!
У меня возникла эта проблема при попытке подключить мое приложение 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 ошибка подключения к базе данных была устранена.
Для меня временная ошибка транзакции возникала всякий раз, когда я переключался с моей сети Wi-Fi на точку доступа моего телефона. Если это произойдет и с вами, перейдите на веб-сайт MongoDB, где вы создали свою базу данных, и снова внесите в белый список свой текущий IP-адрес. Это решит вашу проблему.
Если вы используете MongoDB Atlas. Вам необходимо внести свой IP-адрес в белый список на консоли Atlas в настройках безопасности.
Вы можете прочитать об ошибке в Интернете, но решение этой проблемы: перейдите к атласу MongoDB и добавьте свой IP-адрес.
Перейти к: главная страница> раздел безопасности> доступ к сети> добавить IP
Эта проблема в основном возникает, когда архитектура не знает ваш собственный IP-адрес.
Кроме того, скопируйте и вставьте прямо в Google, чтобы получить прямое решение.
Если у вас все еще есть эта ошибка, другая причина в том, что вы забыли перезапустить сервер nodemon после изменения файла конфигурации. CTRL + C и начать заново, вот как я это решил.
Безопасность> Доступ к сети> Добавить IP-адрес> Добавить текущий IP-адрес компьютера. Решил мою проблему.
Использование mLab - Когда ваш кластер создан, вам нужно добавить пользователя базы данных (на вкладке «Пользователи») и не устанавливать флажок Make read-only. Как только я это сделал, ошибки исчезли. Я получал те же ошибки, что и выше. Пользователь базы данных может быть вашим логином и паролем.
Спасибо за ответ! Не могли бы вы добавить немного подробностей о том, почему возникает проблема, и Зачем ваш ответ исправляет ее?
Перейдите на панель управления MongoDb Atlas. Нажмите «Доступ к сети», нажмите «Добавить IP-адрес» и разрешите подключение с любого IP-адреса. Это должно решить вашу проблему.
А также внесение проблем с безопасностью. Пожалуйста, не делайте этого.
Теперь все готово.
У меня была такая же проблема, когда я пытался подключиться в первый раз, спасибо!
Убедитесь, что на сервере не закончилось место для хранения.
В моем случае ни один из предложенных ответов не помог. Я выдергивал волосы, пока не заметил, что сервер просто закончилось место для хранения. Очистка нескольких мегабайт хранилища сразу устранила ошибку.
TransientTransactionError действительно имеет смысл в этом сценарии из-за того, что он является временной ошибкой, которая может быть устранена явной повторной попыткой - хотя мне потребовалось время, чтобы понять, что это связано с проблемой хранения.
@SagnikPradhan Я хотел бы добавить сюда одну странную вещь. Я этого не сделаю, если я здесь ошибаюсь. Я добавил свой IP-адрес, который я получил из командной строки (команда Ipconfig), и это не сработало. Но когда я попросил кластер получить мой IP-адрес, он получил другой, и это сработало. Если бы кто-нибудь мог объяснить почему, я чувствую, что это добавило бы кое-что к поставленному выше вопросу.