2016-08-13 2 views
2

Ich habe die Anweisungen zum Einrichten einer Node.js-Anwendung mit Loopback wie auf Toptal und Developing APIs with Node.js and LoopBack.io beschrieben folgen. Nach diesen Schritten erhalte ich einen UrlNotFoundError, wenn ich versuche, auf die REST-API für die Anwendung zuzugreifen.Loopback löst UrlNotFoundError aus der Box

Schritte zum Reproduzieren:

  1. die Befehlszeile Strongloop installiert: $ npm install -g strongloop
  2. Führen Sie die Anwendung Generators Loopback: $ slc loopback.
  3. Führen Sie das Projekt: $ node . Das Terminal zeigt die folgende
    Web server listening at: http://0.0.0.0:3000 Browse your REST API at http://0.0.0.0:3000/explorer
  4. Durchsuchen Sie die REST-API.
  5. Versuchen Sie, mit dem bereitgestellten Modell an/Benutzer zu senden.

Daraus ergibt sich die folgende Antwort:

{ 
    "error": { 
    "statusCode": 404, 
    "name": "Error", 
    "message": "Cannot POST /api/Users", 
    "status": 404, 
    "stack": "Error: Cannot POST /api/Users\n at raiseUrlNotFoundError (/Repos/loopback-test/node_modules/loopback/server/middleware/url-not-found.js:20:17)\n at Layer.handle [as handle_request] (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/layer.js:95:5)\n at trim_prefix (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:312:13)\n at /Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:280:7\n at Function.process_params (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:330:12)\n at next (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:271:10)\n at /loopback-test/node_modules/loopback/node_modules/async/dist/async.js:486:20\n at replenish (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:879:29)\n at /loopback-test/node_modules/loopback/node_modules/async/dist/async.js:888:13\n at eachLimit$1 (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:3136:26)\n at Object.<anonymous> (/Repos/loopback-test/node_modules/loopback/node_modules/async/dist/async.js:920:20)\n at restApiHandler (/Repos/loopback-test/node_modules/loopback/server/middleware/rest.js:63:11)\n at Layer.handle [as handle_request] (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/layer.js:95:5)\n at trim_prefix (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:312:13)\n at /Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:280:7\n at Function.process_params (/Repos/loopback-test/node_modules/loopback/node_modules/express/lib/router/index.js:330:12)" 
    } 
} 

Was ich versucht habe:

  • Einrichtung und Verbindung mit einer Datenbank, gemäß den Anweisungen in der Toptal Post.
  • Das API-Projekt und das Beispiel Notes-Projekt wurden getestet, als das Loopback-Projekt eingerichtet wurde (Schritt 2 oben).
  • Verglichen wurde das Projekt mit einem anderen Loopback-Projekt, an dem ich arbeite, wo die REST-API funktioniert. Leider bin ich nicht erfahren genug, um einen signifikanten Unterschied zu erkennen.
  • Implementieren Sie ein benutzerdefiniertes Modell (sowohl im Toptal-Beitrag als auch im Youtube-Video), und versuchen Sie, über die REST-API darauf zuzugreifen.
  • Nach dem raiseUrlNotFoundError gesucht. Der beste Treffer ist this issue on GitHub, der eine (tote) Verbindung zu a SO question bietet.
  • Es wurde versucht, das Projekt auf einem anderen Port als dem Standard 3000 auszuführen, falls es ein Problem mit anderen Projekten gab.
  • Setup automigration der gemeinsamen Modelle in der Datenbank. Der Datenbank wurde ein Benutzer und ein AccessStoken hinzugefügt, und es wurde versucht, diesen AccessStoken im REST-API-Explorer zu verwenden.

Ich verwende Mac OS X, Version 10.11.6. Ich habe Knoten, npm und andere notwendige Werkzeuge installiert.

Was vermisse ich oder was kann ich tun, um zu verhindern, dass der raiseUrlNotFoundError auftritt, und auf die REST-API für mein Projekt zuzugreifen?

Antwort

2

Ich weiß, es ist keine wirklich gute Lösung, aber es ist etwas (mit Gewinn 10 64 Bit). Ich habe genau den gleichen Fehler beim Erstellen der App slc loopback und Auswahl der Loopback-Version 3.X, wenn die App neu erstellt und Loopback Version 2.X die API funktioniert gut, wahrscheinlich das ist der Unterschied zwischen Ihren Projekten.

in der Verzeichnisstruktur von der Wurzel-Ordner gibt es einen Ordner "Server" genannt:

+0

Ah, versuchen Sie nicht, dass! Werde es versuchen, wenn ich heute Abend nach Hause komme. – HenricF

+0

Ja, das war es. Das Erstellen der App mit Loopback 2.x funktionierte gut. Wie Sie vorgeschlagen haben, hat das vorhandene Projekt auch Version 2.x ausgeführt. Vielen Dank! – HenricF

1

Um es einfach das api-Explorer

npm install --save loopback-component-explorer --save 

und registriert die Route wie folgt machen laufenden Betrieb installiert werden. Erstellen Sie eine leere Datei mit dem Namen „bauteil config.json“ in den „Server“ -Ordner und den folgenden Code innen:

{ 
    "loopback-component-explorer": { 
    "mountPath": "/explorer" 
    } 
} 

Jetzt sollten Sie in der Lage http://0.0.0.0:3000/explorer die Explorer-Seite mit der URL zu öffnen.

1

Dieses Problem ist mit Loopback 3.x behoben, also bitte versuchen Sie es jetzt. Wenn das Problem weiterhin besteht, gehen Sie folgendermaßen vor:

Deaktivieren Sie die Context-Middleware, die vom integrierten REST-Handler hinzugefügt wurde, um diese Warnung zu entfernen. Setzen Sie die Eigenschaft remoting.context in server/config.json auf false;

{ 
    "remoting": { 
    "context": false, 
    // etc. 
    }, 
    // etc. 
} 

für weitere Informationen: http://loopback.io/doc/en/lb2/Using-current-context.html

+0

Danke. Ich arbeite momentan nicht am Projekt und habe keinen Zugriff auf die Umgebung, aber es ist gut zu hören, dass es jetzt in 3.x funktionieren sollte. – HenricF

Verwandte Themen