2016-11-02 6 views
7

ich Loopback für meinen Server mit dem folgenden Setup bin mit:Loopback MongoError: nicht für die Suche auf heroku_xxxx.role autorisierte

"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", 

Es ist auf eine mongoDB anschließen, ist auf mlab.com

Meine Hauptabfrage enthält ein Modell und seine Abhängigkeiten, z. B .:

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

99,9% der Zeit, es funktioniert perfekt. Aber wenn ich mehr Aktivität auf der Plattform habe, bekomme ich diesen Fehler, bevor der Server abstürzt. Hier ist der Fehler:

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) 

Manchmal ist es auf db.students ist, manchmal ist es auf db.documents ... scheint zufällig, und ich habe keine Ahnung, wie es zu beheben.

Um eine Verbindung zur DB herzustellen, verwende ich den URI von . Welche sieht wie folgt aus:

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

Mit und ohne ?&authMode=scram-sha1&rm.tcpNoDelay=true, aber immer noch Fehler immer mit.

Irgendwelche Ideen, was passiert und wie das zu beheben?

__ Edit: Ich habe ein paar verschiedene Versionen ohne Glück versucht. Neueste ist:

"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", 

__ Edit: ich diesen Beitrag auf Github gefunden: https://github.com/strongloop/loopback-connector-mongodb/issues/251, die die gleichen Fehler zu sein scheint, folgte ich, was die anderen sagten, ihre Probleme zu lösen, indem die [email protected] wechselnden, aber immer noch nicht Glück ...

+0

Sie sagten, dass dieser Fehler auftritt, wenn Sie mehr Aktivität auf der Plattform haben. Alle mlab-mongodbs haben die "auth" -Flagge, also musst du deine Auth-Informationen angeben (und du hast es bereits gemacht, wie ich sehe). Vielleicht haben Sie mehr dbs mit verschiedenen Authentifizierungsdaten, aber von derselben URI aus erreichbar? oder vielleicht verschiedene DBs für Dev/Staging/Production-Umgebungen? versuchen Sie erneut Ihre Auth-Info einzurichten, hier ist die Dokumentation: http://docs.mlab.com/connecting/#authentication –

+0

@AlbertoFecchi Nun officialy, ich scheinen, um eine Replik-Set haben: mongodb: // : @, /? ReplicaSet = . Hilft das irgendwie? – denislexic

+0

@AlbertoFecchi Es scheint nicht die Aktivität zu sein, sondern geschieht nach einiger Leerlaufzeit auf dem Server. Also, wenn ich neu starte, funktioniert alles gut, dann nach ~ 5 Minuten der Inaktivität, scheitert die nächste Anfrage. Und es ändert sich immer die Sammlung (von Studenten, zu Dokumenten, zu Rollen, dann zu Dokumenten, ...). – denislexic

Antwort

4

Die Lösung war, Loopback auf die neueste Version zu aktualisieren. Die Loopback-Bibliothek enthält den MongoDB-Knotentreiber als Abhängigkeit und verwendet den Treiber, um eine Verbindung mit einer MongoDB-Datenbank herzustellen.

Frühere Versionen des MongoDB-Knotentreibers haben bekannte Verbindungs-/Authentifizierungsprobleme. Durch die Aktualisierung auf die neueste Loopback-Version wurde eine neuere Version des Node-Treibers installiert.

+0

Aktualisiert den Hauptpost. Ich habe es mit ein paar verschiedenen Versionen versucht, aber keiner hat funktioniert. – denislexic