2016-11-02 12 views
7

にクエリに対して許可されていない、私は次のセットアップで私のサーバー用のループバックを使用しています:ループバックMongoError:heroku_xxxx.role

"loopback": "^2.36.0", 
"loopback-boot": "^2.23.0", 
"loopback-component-explorer": "^2.4.0", 
"loopback-component-storage": "^1.9.1", 
"loopback-connector-mongodb": "^1.17.0", 
"loopback-datasource-juggler": "^2.53.0", 

私の主なクエリが含まれmlab.com

上にあるのMongoDBに接続していますモデルとその依存関係、例:

GET /api/course/1234 
PARAMS filter = { 
    include: [ 
      {relation:'students'}, 
      {relation:'documents'}, 
      {relation:'modules'} 
    ] 
} 

時間の99.9%、それは完全に動作します。しかし、私がプラットフォーム上でより多くのアクティビティを開始すると、サーバーがクラッシュする前にこのエラーが発生します。ここではエラーがあります:

MongoError: not authorized for query on db.student 
at Function.MongoError.create (/app/node_modules/mongodb-core/lib/error.js:31:11) 
at queryCallback (/app/node_modules/mongodb-core/lib/cursor.js:182:34) 
at /app/node_modules/continuation-local-storage/context.js:76:17 
at bound (domain.js:287:14) 
at runBound (domain.js:300:12) 
at Callbacks.emit (/app/node_modules/mongodb-core/lib/topologies/server.js:119:3) 
at null.messageHandler (/app/node_modules/mongodb-core/lib/topologies/server.js:397:23) 
at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:302:22) 

時にはそれがdb.students上だが、時にはそれがdb.documents上の...ランダムようだと私はそれを修正する方法は考えています。

DBに接続するには、mlabで提供されるURIを使用します。これは次のようになります:

mongodb://<dbuser>:<dbpassword>@<dbpath>/<dbname> 

?&authMode=scram-sha1&rm.tcpNoDelay=trueの有無にかかわらず、それでもエラーが発生します。

何が起こっているのか、これを修正する方法はありますか?

__ 編集:私は運がないいくつかの異なるバージョンを試しました。最新のは、次のとおりです。 編集__

"loopback": "^2.22.0", 
"loopback-boot": "^2.6.5", 
"loopback-component-explorer": "^2.4.0", 
"loopback-component-storage": "^1.9.1", 
"loopback-connector-mongodb": "^1.17.0", 
"loopback-datasource-juggler": "^2.39.0", 

:私はGitHubの上で、この記事を見つけました:https://github.com/strongloop/loopback-connector-mongodb/issues/251同じエラーであるように思われ、私は他の人がいない、まだ[email protected]を変更することによって、彼らの問題を解決しますが言ったことに続きます運が...

+0

あなたは、このエラーは、プラットフォーム上で「より多くのアクティビティ」がある場合に発生すると言いました。すべてのmlab mongodbsは 'auth'フラグを持っているので、認証情報を提供しなければなりません。おそらく、あなたは別の認証資格情報を持つより多くのdbsを持っていますが、同じURIから到達可能でしょうか? dev/staging/production環境のために異なるDBを使用していますか?私はレプリカセットを持っているようです:mongodb:// @、私はレプリカセットを持っているようです:http://docs.mlab.com/connecting/#authentication –

+0

@AlbertoFecchi /?replicaSet = 。それはどんな方法で助けますか? – denislexic

+0

@AlbertoFecchiこれはアクティビティのようではありませんが、サーバー上で何らかのアイドル時間が経過した後に発生します。だから私が再起動すると、すべて正常に動作し、5分後に次の要求が失敗します。そして、それは常にコレクションを変更します(学生から文書、役割、文書、...)。 – denislexic

答えて

4

解決策は、最新のバージョンにループバックを更新することでした。 LoopbackライブラリにはMongoDB Nodeドライバが依存関係として含まれており、ドライバを使用してMongoDBデータベースに接続します。

以前のバージョンのMongoDBノードドライバには、接続/認証に関する既知の問題があります。最新のLoopbackバージョンに更新すると、より新しいバージョンのNodeドライバがインストールされました。

+0

メインポストを更新しました。私はちょうど2つの異なるバージョンで試しましたが、どれもうまくいきません – denislexic