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
から3つの関数を呼び出します:
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)]: {} }
私は何を間違えていますか? 記事 を見つけましたが、何もできません。
TransientTransactionErrorとは
TransientTransactionError
は一時的なものとして分類されるトランザクションエラーであり、再試行した場合は成功する可能性があります。さらに、書き込みロックが取得されておらず、トランザクション(新しいデータ)がトランザクションスナップショット(以前のデータ)に反映されていない場合、コミットの前にTransientTransactionError書き込み競合が発生します。そのため、これらのエラーは、成功したコミットです。
このシナリオで再試行するトランザクションは、トランザクションの最初から再試行されます。
留意してくださいこのエラーラベルは、ロックが取得されたがトランザクションがコミットを完了できないときに発生するコミットエラーとは異なります。このエラーラベルはUnknownTransactionCommitResultです。これへの参照は、アプリケーションのどこでエラーが発生しているのか、根本的な原因は何か、アプリケーションはさまざまなエラータイプによってどのように応答するのか、または応答するのかを理解しているため、注目に値します。
MongoDBがサポートするドライバー を使用している場合、コードでこのエラーが発生する可能性のある原因は2つあります。
MongoDB Transactions:retry-transaction のコード例は、TransientTransactionError
の処理方法を示しています。
持っていた
'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]:
MongoDB Webサイトの「メインページ>セキュリティセクション>ネットワークアクセス> IPの追加」に従って、現在のIPをwhiteListに追加しました。
これがお役に立てば幸いです。
Express/NodeJSのMDNチュートリアルでpopulatedb.js
スクリプトを実行すると、このエラーが発生しました。
スクリプトはmongodb://
で始まるdb接続を探していましたが、mongoからの接続文字列はmongodb+srv://
で始まりました。
代わりにこの構文をチェックするようにスクリプトを編集し、エラーを解決しました。
これが誰かの役に立つことを願っています。
Windowsマシンでも同じ問題/エラーが発生しました。 mongodbサービスを開始したと思っていたとしても、Windowsサービスで実行されているのを見ませんでした。そのため、サービス内でmongoDBサービスを手動で開始すると、エラーはなくなりました。お役に立てれば!
私は同様の問題を抱えていました...一日中、マングース経由で接続できました。その後、「TransientTransactionError」エラーが発生し始めました。シェル経由でmongoDBに接続できたため、サーバーが期待どおりに稼働していることがわかりました。
IPv6/localhost。 IPがIPv4からIPv6に切り替わりました。 IPv6を無効にし、通常のIPv4 IPを取得することで問題を解決しました。
編集-NICがIPv6 IPで構成されている間に 'localhost'に接続することにより、この問題を確実に再作成/作成できるようです。 localhost-> 127.0.0.1を変更すると、問題が解決するようです。
ここでは、MongoNetworkError
およびTransientTransactionError
と表示されます。これらは、MongoDBへの接続中にエラーが発生したことを示しています。これらのエラーは次の原因で発生する可能性があります。
1。接続文字列が間違っています
2。IPアドレスはホワイトリストに登録されていません(リモートdbサービスを使用している場合)
その他のリソース: https://docs.mongodb.com/manual/core/transactions/#retry-transaction
このエラーが引き続き発生する場合、別の理由は、構成ファイルを変更した後にnodemonサーバーを再起動するのを忘れたことです。 Ctrl + Cを押してもう一度開始します。これが解決方法です。
私にとって、一時的なトランザクションエラーは、wifiネットワークから携帯電話のホットスポットに切り替えるたびに発生しました。この問題が発生した場合は、データベースを作成したMongoDB Webサイトにアクセスし、現在のIPアドレスを再度ホワイトリストに追加してください。これで問題が解決します。
MLabの使用-クラスターが作成されたら、(ユーザータブの下に)データベースユーザーを追加し、Make read-only
チェックボックスをクリックしないようにする必要があります。これを行うと、エラーはなくなりました。上記と同じエラーが発生していました。データベースユーザーは、ログインユーザー名とパスワードにすることができます。
MongoDb Atlasダッシュボードに移動します。 [ネットワークアクセス]をクリックし、[IPアドレスの追加]をクリックして、任意のIPアドレスからの接続を許可します。これで問題が解決するはずです。
MongoDB Atlasを使用している場合。セキュリティ設定のAtlasコンソールでIPアドレスをホワイトリストに登録する必要があります。
[セキュリティ]> [ネットワークアクセス]> [IPアドレスの追加]> [現在のコンピューターのIPアドレスの追加]。私の問題を解決しました。
HerokuアプリをMongoDB Atlasデータベースに接続しようとしたときに、この問題が発生しました。
On youターミナルを実行する場合
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でサーバー接続をホワイトリストに登録した後、データベース接続エラーは解決されました。