最近、mongoLabにアカウントを作成しました。次のステートメントを使用してデータベースに接続しようとしています。
var mongoose = require('mongoose');
mongoose.connect('mongodb://mk:[email protected]:47742/mkdb');
常に次のエラーが表示されます
MongoError: auth failed
at Function.MongoError.create (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:31:11)
at /Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:793:66
at Callbacks.emit (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:94:3)
at null.messageHandler (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:235:23)
at Socket.<anonymous> (/Users/a042292/Desktop/start/node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:259:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.Push (_stream_readable.js:126:10)
at TCP.onread (net.js:538:20)
Mlabのアカウントusername
およびpassword
ではなく、データベースusername
およびpassword
を使用していることを確認してください。
MLab(旧MongoLab)で、次の操作を行います
Users
に移動しますAdd Database User
これで、mongo ds061374.mlab.com:61374/yourdb -u <dbuser> -p <dbpassword>
を使用してシェルでこれをテストできます
Mongolabは2.6.xデータベースを3.0.xにアップグレードしました。残念ながら、mongo3には異なる認証メカニズムがあるため、古いクライアントには互換性がありません。
Mongooseはネイティブmongoドライバーを使用しているため、アップグレードする必要があります。これは通常、ローカルmongoインストールをアップグレードすることにより行われます。
Mongojsを使用している場合は、最新バージョンにアップグレードし、接続時にオプションオブジェクトにauthMechanism:'ScramSHA1'
パラメーターを追加します。
db = mongojs('mongodb://username:[email protected]:32132/mydb', ["mycollection"], {authMechanism: 'ScramSHA1'});
私にとっての解決策は:
$ npm install --save --save-exact [email protected]
ここでは、mLabのユーザー名とパスワードがデータベースのユーザー名とパスワードではないことを知っておく必要があります...接続文字列に正しいユーザー名とパスワードを使用したかどうかを確認する必要があります
ここでデータベースユーザーアカウントを作成できます---- >>
次のように私の接続定数
const db ="mongodb://<My database username>:<my database password>.mlab.com:39648/videoplayer"
db urlの最後に?authSource = yourDB&w = 1を追加するだけです
mongoose.connect( 'mongodb:// user:password @ Host/yourDB?authSource = yourDB&w = 1')これは私のために働きます。 &w = 1は重要です
例えば
MONGO_URI = 'mongodb:// kahn:[email protected]:13402/ecommerce?authSource = ecommerce&w = 1';
https://github.com/Automattic/mongoose/issues/4587
これは私の命を救った
1-データベースが稼働していることを確認します。 2-アクセス資格情報を持つdbユーザーを作成することを忘れないでください。
それがあなたを助けることを願っています!
適切なdbユーザー名とパスワードを使用していることを確認してください。
コードを介してdbに接続しようとしていて、ユーザー名とパスワードに「@」、「$」などの特殊文字が含まれている場合は、encodeURIComponent() funtionを使用してURIをエンコードしてください
例:"localhost:// pooja:" + encodeURIComponent( 'pooja @ 123')+ "/ trymynewdb"次に、エンコードされたuriを使用してdbに接続します。
Mshellを介して接続を試すことができます。mongooseを使用して接続しているときに、データベースユーザー名と正しいパスワードを指定した場合でも、このような問題が発生しました。
ターミナルで次のコマンドを入力するだけです
mongo ds239412.mlab.com:39412/videoplayer11 -u dbuser -p dbpassword( コマンドは異なります。こちらをご覧ください ).
そして、mongoose経由で接続していたモデルファイルのコードを削除します。
私のために働いた。幸せそうな顔。
パスワードに特殊文字が含まれている場合は、次の特殊文字のURLエンコード値を確認するのが最善です: rl encoding list
ただし、接続を試みる前に、データが最初に送信されていることを確認することを強くお勧めします。それを確認する1つの方法は、送信されているデータをconsole.logに記録することです。例:
console.log(process.env.MONGO_ATLAS_PW);
Mongooseの古いバージョン(バージョン3.8.10)を使用しているときにこのエラーが発生していました。最新リリース(バージョン5.0.10)にアップグレードすると、エラーが消えて接続が確立されました。
Npm install [email protected] --save ...を実行するだけです。ただし、バージョンを最新のリリースに置き換えてください。