Что такое TransientTransactionError в Mongoose (или MongoDB)?
У меня есть 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.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)]: {} }
Что я делаю не так? Я нашел статью, но ничего не могу с этим поделать.
Ответы
Ответ 1
Что такое TransientTransactionError
TransientTransactionError
- это транзакционная ошибка, которая классифицируется как временная, и при повторной попытке она может быть успешной. Кроме того, конфликт записи TransientTransactionError возникает перед фиксацией, когда блокировка записи не была взята, и транзакция (новые данные) не отражена в снимке транзакции (предыдущие данные). В результате эти ошибки можно безопасно повторить до тех пор, пока это успешный коммит
Транзакции, которые повторяются в этом сценарии, повторяются с начала транзакции.
Имейте в виду, что эта метка ошибки отличается от ошибок фиксации, которые происходят, когда блокировка была взята, но транзакция не может завершить свою фиксацию. Метка ошибки для этого - UnknownTransactionCommitResult. Ссылка на это заметна из-за разницы в понимании того, где в вашем приложении происходит ошибка и что может быть основной причиной, и как приложение может и будет реагировать из-за различных типов ошибок.
Если вы используете драйверы, поддерживаемые MongoDB, существует две возможные причины, по которым код получает эту ошибку:
- Любая ошибка команды базы данных, включающая метку ошибки "TransientTransactionError" в поле "errorLabels".
- Обнаружена любая сетевая ошибка при выполнении любой команды, кроме commitTransaction в транзакции.
Пример кода в Транзакциях MongoDB: retry-транзакция показывает, как обрабатывать TransientTransactionError
.
Ответ 2
я имел
'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]:
Я добавил свой текущий IP в whiteList, следуя "главной странице> раздел безопасности> доступ к сети> добавить IP" на веб-сайте MongoDB.
Надеюсь, это поможет.
Ответ 3
У меня была такая же проблема/ошибка, хотя на машине с Windows. Хотя я думал, что запустил службу mongodb, я не видел, чтобы она работала в службах Windows. Итак, я вручную запустил службу mongoDB внутри Служб, а затем ошибка исчезла. Надеюсь это поможет!
Ответ 4
Я столкнулся с этой ошибкой при запуске populatedb.js
сценария в учебнике MDN для экспресс /NodeJS.
Сценарий искал соединение БД, начинающееся с mongodb://
, однако моя строка соединения от mongo началась с mongodb+srv://
.
Вместо этого я отредактировал скрипт для проверки этого синтаксиса, что позволило устранить ошибку.
Я надеюсь, что это помогает кому-то.
Ответ 5
Если нет проблем с безопасностью, и вы просто делаете это для подключения: при настройке белого списка IP-адресов; формат должен быть 0.0.0.0/0, вы не столкнетесь с проблемой.
Более того, как вы сами ответили, мы можем добавить ip, к которому нам нужен доступ.
Ответ 6
У меня была похожая проблема... Весь день я мог подключиться через мангуста. После этого я начал получать ошибку TransientTransactionError. Я мог подключиться к mongoDB через оболочку, так что я знал, что сервер работает и работает, как и ожидалось.
IPv6/локальный. Мой IP-адрес переключился с IPv4 на IPv6. Я решил проблему, отключив IPv6 и получив обычный IPv4 IP.
РЕДАКТИРОВАТЬ - кажется, я могу надежно воссоздать/создать эту проблему, подключившись к "localhost", в то время как мой сетевой адаптер настроен с IPv6 IP. Изменение localhost-> 127.0.0.1, кажется, решает проблему.
Ответ 7
Для меня временная ошибка транзакции возникала всякий раз, когда я переключался со своей сети Wi-Fi на точку доступа к телефону. Если это произойдет и с вами, перейдите на веб-сайт MongoDB, где вы создали свою базу данных, и снова внесите в белый список ваш текущий IP-адрес. Это решит вашу проблему.
Ответ 8
Если у вас все еще есть эта ошибка, другая причина - вы забыли перезапустить сервер nodemon после изменения файла конфигурации. CTRL + C и начать снова, вот как я это решил.
Ответ 9
Использование mLab - при создании кластера необходимо добавить пользователя базы данных (на вкладке пользователи) и не устанавливать флажок Make read-only
. Как только я это сделал, ошибки исчезли. Я получал те же ошибки, что и выше. Пользователь базы данных может быть вашим логином и паролем.
Ответ 10
Перейдите на панель мониторинга MongoDb Atlas. Нажмите "Доступ к сети", нажмите "Добавить IP-адрес" и разрешите подключение с любого IP-адреса.
Это должно решить вашу проблему.
Ответ 11
Я столкнулся с этой ошибкой, будучи
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
при попытке подключиться к атласу Монгос. Моя проблема оказалась в том, что я занес в белый список мой проксированный IP-адрес, а не фактический IP-адрес. Отключение моего прокси-сервера и внесение в белый список моего действительного IP-адреса устранили проблему.
Ответ 12
У меня была эта проблема при попытке подключить мое приложение 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 ошибка подключения к базе данных была устранена.
Ответ 13
Если вы используете MongoDB Atlas. Вам нужно внести белый список вашего IP-адреса на консоли Atlas в настройках безопасности.
Ответ 14
Безопасность> Доступ к сети> Добавить IP-адрес> Добавить текущий IP-адрес компьютера.
Решил мою проблему.
Ответ 15
- Перейдите в свою панель мониторинга mongoDB
- Откройте доступ к сети (он есть в боковой панели навигации)
- Нажмите на ДОБАВИТЬ IP-АДРЕС
- Нажмите "Разрешить" с любого IP-адреса (это в основном дает доступ к вашему динамическому IP-адресу)
Теперь вы сделали.
Ответ 16
Вы можете прочитать об ошибке онлайн, но решение этой проблемы: перейдите к атласу MongoDB и добавьте свой IP-адрес. Это будет работать просто отлично.
Ответ 17
Вы должны изменить текущий IP-адрес при доступе к сети