javascript - ¿Qué es un TransientTransactionError en Mongoose(o MongoDB)?
node.js (11)
Entonces tengo dos archivos, uno es
server.js
y el otro es
db.js
El archivo
db.js
interactúa con mi db usando Mongoose y yo uso
server.js
para llamar a funciones desde
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}`)
})
}
}
})
}
Y mi server.js llama tres funciones en total desde
db.js
que son
var DB = require(''./db.js'')
var db = DB()
db.getPostsAll()
db.newPost()
No entiendo por qué estoy recibiendo este error:
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)]: {} }
Perdón por la pregunta tonta, pero ¿alguien puede decirme qué está pasando aquí? ¿Y qué estoy haciendo mal?
EDITAR : Encontré un artículo relacionado con este problema: https://docs.mongodb.com/manual/core/transactions/#retry-transaction Pero realmente no puedo compensar nada con eso.
EDIT 2
: encontrado el problema.
Fue un problema de red, ya que dice
MongoNetworkError
y supongo que
TransientTransactionError
refiere a algún problema temporal del lado de la base de datos.
Lo resolví haciendo una lista blanca de mi dirección IP.
¿Qué es un TransientTransactionError?
Un
TransientTransactionError
es un error transaccional que se clasifica como temporal y, si se reintenta,
puede
tener éxito.
Además, se produce un conflicto de escritura TransientTransactionError antes de una confirmación cuando no se ha realizado un bloqueo de escritura y la transacción (datos nuevos) no se refleja en la instantánea de la transacción (datos anteriores). Como resultado, estos errores son completamente seguros de reintentar hasta que Es un compromiso exitoso.
Las transacciones que se reintentan en este escenario se reintentan desde el principio de la transacción.
Tenga en cuenta que esta etiqueta de error es diferente de los errores de confirmación que se producen cuando se realiza el bloqueo, pero la transacción no puede completar su confirmación. La etiqueta de error para esto es UnknownTransactionCommitResult. La referencia a esto es notable debido a la diferencia en la comprensión de dónde está ocurriendo un error en su aplicación y cuál puede ser la causa subyacente y cómo la aplicación puede y / o responderá debido a diferentes tipos de errores.
Si está utilizando controladores compatibles con MongoDB , hay dos causas posibles por las que el código está recibiendo este error:
- Cualquier error de comando de la base de datos que incluya la etiqueta de error "TransientTransactionError" en el campo "errorLabels".
- Cualquier error de red encontrado ejecutando cualquier comando que no sea commitTransaction en una transacción.
El ejemplo de código en
https://docs.mongodb.com/manual/core/transactions/#retry-transaction
muestra cómo manejar
TransientTransactionError
.
Encontré este error al ejecutar la secuencia de comandos pop.js en el tutorial de MDN para Express / NodeJS.
La secuencia de comandos buscaba una conexión de db que comenzara con
mongodb://
, sin embargo, mi cadena de conexión de mongo comenzó con
mongodb+srv://
.
Edité el script para verificar esta sintaxis, lo que resolvió el error.
Espero que esto ayude a alguien.
Para mí, el error de transacción transitoria ocurrió cada vez que cambié de mi red wifi al punto de acceso de mi teléfono. Si esto también le sucede a usted, vaya al sitio web de MongoDB donde ha creado su base de datos y vuelva a incluir en su lista de direcciones IP su dirección IP actual. Esto resolverá tu problema.
Puede leer sobre el error en línea, pero la solución para este problema es : vaya a su atlas MongoDB y agregue su dirección IP . Funcionará bien
Si aún tiene este error, otra razón es que se olvidó de reiniciar el servidor nodemon después de cambiar el archivo de configuración. CTRL + C y empezar de nuevo, así es como lo resolví.
Si está utilizando MongoDB Atlas. Debe incluir su dirección IP en la Consola Atlas en la configuración de seguridad.
Tuve el mismo problema / error, aunque en una máquina con Windows. Aunque pensé que había iniciado el servicio mongodb, no lo vi ejecutándose en los Servicios de Windows. Entonces, comencé manualmente el servicio mongoDB dentro de Servicios y luego el error desapareció. ¡Espero que esto ayude!
Tuve este problema al intentar conectar mi aplicación Heroku a una base de datos Atlas de MongoDB.
Si haces una en tu terminal
heroku logs --tail
Es posible que vea
ERROR: { MongoNetworkError:
connection 4 to cluster0-shard-40-01-qnwp8.mongodb.net:27017 closed
name: ''MongoNetworkError'',
errorLabels: [ ''TransientTransactionError'' ],
[Symbol(mongoErrorContextSymbol)]: {} }`
Después de incluir en la lista blanca la conexión del servidor en MongoDB Atlas, se resolvió el error de conexión de la base de datos.
Tuve un problema similar ... Todo el día pude conectarme a través de la mangosta. Entonces bang comencé a recibir el error ''TransientTransactionError''. Podía conectarme a mongoDB a través de shell, así que sabía que el servidor estaba funcionando como se esperaba.
IPv6 / localhost. Mi IP cambió de IPv4 a IPv6. Resolví el problema deshabilitando IPv6 y obteniendo IPv4 IP regular.
EDITAR - parece que puedo volver a crear / crear este problema de manera confiable conectándome a ''localhost'' mientras mi NIC está configurada con una IP de IPv6. Cambiar localhost-> 127.0.0.1 parece resolver el problema.
tuve
''MongoNetworkError'',
errorLabels: [ ''TransientTransactionError'' ],
[Symbol(mongoErrorContextSymbol)]:
Agregué mi IP actual a la lista blanca después de "página principal> sección de seguridad> acceso a la red> agregar IP" en el sitio web de MongoDB.
Espero que esto ayude.