sails.js
Blueprint-API
Suche…
Bemerkungen
Wie funktioniert die Blueprint-API?
Wenn Segel anfänglich mit dem sails lift
Segel beginnt, sails lift
Segel, ob ein Controller definiert ist. In unserem Beispiel haben wir einen Controller, den User-Controller. Sails bietet dann Zugriff auf Blueprint-Aktionen für diesen Benutzer-Controller, als ob wir diese selbst in den Controller eingebaut hätten. Sails erstellt auch automatisch Blueprint-Routen zum Zeitpunkt des Anhebens des Servers. Also selbst wenn keine Routen in definiert ist /config/routes.js
und keine Aktion in definierten /api/controllers/UserController.js
ausdrücklich, nachdem Sie den Server heben alle diese Routen und Aktionen zur Verfügung zu verwenden.
Blueprint-Routen
Wenn Sie sails lift
mit angehobener Blaupause ausführen, prüft das Framework Ihre Controller, Modelle und Konfiguration, um bestimmte Routen automatisch zu binden. Diese impliziten Blueprint-Routen ermöglichen es Ihrer App, auf bestimmte Anforderungen zu reagieren, ohne dass Sie diese Routen manuell in der Datei config/routes.js
binden müssen. Standardmäßig verweisen die Blueprint-Routen auf ihre entsprechenden Blueprint- Aktionen , von denen jede mit benutzerdefiniertem Code überschrieben werden kann.
Es gibt drei Arten von Blueprint-Routen in Sails:
- RESTful-Routen , bei denen der Pfad immer
/:model/:id?
. Wenn dasUser
und der Controller definiert sind, bindet blueprint RESTful-Routen implizit folgendermaßen:
Diese Routen verwenden das HTTP-Verb, um die Aktion zu bestimmen, die auch dann ausgeführt werden soll, wenn die Route gleich ist. Eine'GET /user/:id?': { controller: 'User', action: 'find' }, 'POST /user': { controller: 'User', action: 'create' }, 'PUT /user/:id?': { controller: 'User', action: 'update' }, 'DELETE /user/:id?': { controller: 'User', action: 'destroy' }
POST
Anfrage an/user
erstellt also einen neuen Benutzer, einePUT
Anfrage an/user/123
aktualisiert den Benutzer mit dem Primärschlüssel 123, und eineDELETE
Anfrage an/user/123
löscht den Benutzer, dessen Primärschlüssel 123 ist In einer Produktionsumgebung sollten RESTful-Routen im Allgemeinen durch Richtlinien geschützt werden, um den Zugriff durch Unbefugte zu verhindern.
Verknüpfungsrouten , bei denen die durchzuführende Aktion im Pfad codiert ist. Für unser Benutzermodell und Controller bindet Sails die folgenden vier Verknüpfungsrouten implizit.
'GET /user/find/:id?': { controller: 'User', action: 'find' }, 'GET /user/create/:id?': { controller: 'User', action: 'create' }, 'GET /user/update/:id?': { controller: 'User', action: 'update' }, 'GET /user/destroy/:id?': { controller: 'User', action: 'destroy' }
Zum Beispiel erstellt die Verknüpfung
/user/create?name=joe
einen neuen Benutzer, während/user/update/1?name=mike
das/user/update/1?name=mike
von Benutzer # 1 aktualisiert. Beachten Sie, dass diese Routen nur aufGET
Anforderungen antworten. Verknüpfungswege sind für die Entwicklung sehr praktisch, sollten aber in einer Produktionsumgebung generell deaktiviert werden. Es ist nicht für die Produktion konzipiert.Aktionsrouten , die automatisch Routen für Ihre benutzerdefinierten Controller-Aktionen erstellen. Lassen Sie die
query
beispielsweise eine benutzerdefinierte Aktion sein, die in User Controller definiert ist. Dann wären folgende Routen implizit für Segel verfügbar -'GET /user/query/:id?': { controller: 'User', action: 'query' }, 'POST /user/query/:id?': { controller: 'User', action: 'query' }, 'PUT /user/query/:id?': { controller: 'User', action: 'query' }, 'DELETE /user/query/:id?': { controller: 'User', action: 'query' }
Wenn die Anfrage in
/user/query/:id?
Route dann unabhängig vom HTTP-Verb die Aktion wäre gleich. Im Gegensatz zu RESTful- und Shortcut-Routen erfordern Aktionsrouten nicht , dass ein Controller über eine entsprechende Modelldatei verfügt. Das heißt, wenn Sie einen Controller in der Datei/api/controllers/FooController.js
definieren, aber kein Modell in der Datei/api/models/Foo.js
, würde es keine RESTful- oder Shortcut-Route mit/foo
aber es gibt immer noch Aktionsrouten Zur Verwendung verfügbar.
Reihenfolge der passenden Routen
Wenn eine Anfrage eingeht, passen die Segel die Route zuerst an explizit definierte Routen an. Wenn es passt, wird kein weiterer Abgleich durchgeführt und die entsprechende Aktion ausgeführt. Wenn dies nicht der Fall ist, wird die Route zuerst mit den Blueprint-Aktionsrouten abgeglichen. Wenn sie nicht mit den Restrouten übereinstimmt, und wenn sie nicht mit einer der beiden Routen übereinstimmt, werden Verknüpfungsrouten angegeben. Wenn Ihre Datei /config/routes.js
einen Eintrag wie den folgenden enthält:
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
Dann können Sie nicht erwarten, dass query
Aktionsrouten funktionieren. Da dieselbe Route wie die query
Aktionsroute mit den explizit definierten Routen abgeglichen wird und find
Suchaktion des Benutzer-Controllers ausgeführt wird.
Blueprint-Aktionen
Plan Aktionen sind generische Aktionen entwickelt , um die Arbeit mit jedem Ihres Controller , die ein Modell mit dem gleichen Namen haben (zB (nicht mit Bauplan Aktion Routen verwechselt wird) ParrotController
müßte ein Parrot
- Modell). Betrachten Sie sie als das Standardverhalten Ihrer Anwendung. Zum Beispiel, wenn Sie ein User.js
Modell und ein leeren UserController.js
Controller find
, create
, update
, destroy
, populate
, add
und remove
Aktionen implizit vorhanden ist , ohne dass Sie sie zu schreiben.
Standardmäßig sind die Blueprint-RESTful-Routen und Shortcut-Routen an die entsprechenden Blueprint-Aktionen gebunden. Jede Blueprint-Aktion kann jedoch für einen bestimmten Controller überschrieben werden, indem eine benutzerdefinierte Aktion in dieser Controller-Datei erstellt wird (z. B. ParrotController.find
). Alternativ können Sie die Blueprint-Aktion überall in Ihrer App überschreiben, indem Sie Ihre eigene Blueprint-Aktion erstellen.
Segel wird mit den folgenden Blueprint-Aktionen geliefert:
- finden
- einen finden
- erstellen
- aktualisieren
- zerstören
- bevölkern
- hinzufügen
- Löschen
Blueprint-Routen deaktivieren
Globale Basis : Die Blueprint-API-Konfiguration wird in der Datei
/config/blueprint.js
definiert. Sie können von dort aus alle drei Arten von Blueprint-Routen für alle Controller aktivieren oder deaktivieren. Wenn Sie beispielsweise Blueprint-Verknüpfungsrouten für alle Controller deaktivieren, aber sowohl die Aktions- als auch die/config/blueprint.js
aktiviert lassen/config/blueprint.js
sollte Ihre/config/blueprint.js
folgendermaßen aussehen:module.exports.blueprints = { action: true, rest: true, shortcut: false }
Auf Controller-Basis : Sie können auch die Einstellungen von
/config/blueprints.js
auf Controller-Basis überschreiben, indem Sie in Ihrer Controller-Definition einen '_config'-Schlüssel definieren und ihm ein Konfigurationsobjekt mit Überschreibungen für die Einstellungen zuweisen in dieser Datei. Wenn Sie beispielsweise Verknüpfungsrouten nur für Ihren Benutzer-Controller und nicht für weitere Controller aktivieren möchten, müssen Sie bei der obigen Blueprint-Konfiguration das folgende Schlüsselwertpaar im Benutzer-Controller verwenden.module.exports = { _config: { actions: true, shortcuts: true, rest: true } }