sails.js
Blauwdruk API
Zoeken…
Opmerkingen
Hoe werkt Blueprint API?
Bij het zeilen in eerste instantie begint te gebruiken sails lift
, zeilen kijkt om te zien of u een controller gedefinieerd. In ons voorbeeld hebben we één controller, de User-controller. Sails biedt vervolgens toegang tot blauwdrukacties voor deze gebruikerscontroller alsof we ze zelf in de controller hebben gebouwd. Sails maakt ook automatisch blauwdrukroutes op het moment dat de server wordt opgetild. Dus zelfs als er geen routes zijn gedefinieerd in /config/routes.js
en er geen actie is gedefinieerd in /api/controllers/UserController.js
, zijn al deze routes en acties na gebruik van de server beschikbaar voor gebruik.
Blauwdrukroutes
Wanneer u sails lift
met blauwdrukken ingeschakeld, inspecteert het framework uw controllers, modellen en configuratie om bepaalde routes automatisch te binden. Met deze impliciete blauwdrukroutes kan uw app op bepaalde verzoeken reageren zonder dat u die routes handmatig hoeft te binden in uw config/routes.js
bestand. Standaard, wijzen op hun overeenkomstige blauwdruk acties, die elk kunnen worden overschreven met aangepaste code de blauwdruk routes.
Er zijn drie soorten blauwdrukroutes in Sails:
- RESTful routes , waarbij het pad altijd is
/:model/:id?
. Wanneer hetUser
en de controller zijn gedefinieerd, verbindt de blauwdruk RESTful-routes impliciet op de volgende manier -
Deze routes gebruiken het HTTP-werkwoord om de actie te bepalen die moet worden uitgevoerd, zelfs als de route hetzelfde is. Dus, een'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
verzoek aan/user
zal een nieuwe gebruiker aanmaken, eenPUT
verzoek aan/user/123
zal de gebruiker bijwerken met primaire sleutel 123 en eenDELETE
verzoek aan/user/123
zal de gebruiker verwijderen met de primaire sleutel 123. In In een productieomgeving moeten RESTful-routes in het algemeen worden beschermd door beleid om ongeautoriseerde toegang te voorkomen.
Snelkoppelingroutes , waarbij de te nemen actie in het pad is gecodeerd. Voor ons gebruikersmodel en controller bindt Sails impliciet vier snelkoppelingsroutes.
'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' }
De
/user/create?name=joe
snelkoppeling maakt bijvoorbeeld een nieuwe gebruiker, terwijl/user/update/1?name=mike
het naamveld van gebruiker # 1 bijwerkt. Merk op dat deze routes alleen reageren opGET
verzoeken. Snelkoppelingroutes zijn erg handig voor ontwikkeling, maar moeten over het algemeen worden uitgeschakeld in een productieomgeving. Het is niet ontworpen om te worden gebruikt in de productie.Actieroutes , die automatisch routes maken voor uw aangepaste controlleracties. Laat
query
bijvoorbeeld een aangepaste actie zijn die is gedefinieerd in Gebruikerscontroller. Dan zouden de volgende routes impliciet beschikbaar zijn voor zeilen -'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' }
Als een verzoek wordt gedaan in
/user/query/:id?
route dan onafhankelijk van het HTTP-werkwoord zou de actie hetzelfde zijn. In tegenstelling tot RESTful en snelkoppelingsroutes, vereisen actieroutes niet dat een controller een bijbehorend modelbestand heeft. Wat betekent dat als u een controller definieert in het bestand/api/controllers/FooController.js
maar geen model in het bestand/api/models/Foo.js
, er geen RESTful of snelkoppeling met/foo
maar er zullen nog steeds/api/models/Foo.js
zijn Beschikbaar om te gebruiken.
Volgorde van overeenkomende routes
Wanneer een verzoek komt, zullen zeilen eerst de route matchen met expliciet gedefinieerde routes. Als het overeenkomt, wordt er geen verdere matching uitgevoerd en wordt de bijbehorende actie uitgevoerd. Maar als het niet overeenkomt, wordt de route eerst vergeleken met actieroutes voor de blauwdruk, zo niet dan met rustroutes en als het niet overeenkomt met de snelwegen. Dus als uw /config/routes.js
iets bevat zoals het volgende-
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
Dan kunt u niet verwachten dat query
werken. Omdat dezelfde route als de query
actieroute zou worden vergeleken met de expliciet gedefinieerde routes en find
actie van de gebruikerscontroller zou worden uitgevoerd.
Blauwdrukacties
Blueprint acties (niet te verwarren met blauwdruk actie routes) zijn generieke maatregelen om werken met een van uw controllers dat een model met dezelfde naam hebben (bijv ParrotController
zou moeten Parrot
model). Zie ze als het standaardgedrag voor uw toepassing. Als u bijvoorbeeld een User.js
model en een lege UserController.js
controller hebt, kunt find
impliciet find
, create
, update
, destroy
, populate
, add
en remove
zonder dat u ze hoeft te schrijven.
Standaard zijn de blauwdruk RESTful-routes en snelkoppelingsroutes gebonden aan hun overeenkomstige blauwdrukacties. Elke blauwdrukactie kan echter voor een bepaalde controller worden opgeheven door een aangepaste actie in dat controllerbestand te maken (bijvoorbeeld ParrotController.find
). Als alternatief kunt u de blauwdrukactie overal in uw app overschrijven door uw eigen aangepaste blauwdrukactie te maken.
Sails wordt geleverd met de volgende blauwdrukacties:
- vind
- vind een
- creëren
- bijwerken
- vernietigen
- bevolken
- toevoegen
- verwijderen
Blauwdrukroutes uitschakelen
Globale basis : Blueprint API-configuratie is gedefinieerd in het bestand
/config/blueprint.js
. U kunt vanaf hier alle drie de soorten blauwdrukroutes voor alle controllers in- of uitschakelen. Als u bijvoorbeeld snelkoppelingsroutes voor blauwdrukken voor al uw controllers wilt uitschakelen, maar zowel actie- als/config/blueprint.js
ingeschakeld wilt houden, zou uw/config/blueprint.js
moeten zien -module.exports.blueprints = { action: true, rest: true, shortcut: false }
Op basis van de controller : u kunt ook de instellingen van
/config/blueprints.js
per controller overschrijven door een sleutel '_config' te definiëren in de definitie van uw controller en er een configuratieobject aan toe te wijzen met overschrijvingen voor de instellingen in dit bestand. Als u bijvoorbeeld wilt dat snelkoppelingsroutes alleen zijn ingeschakeld voor uw gebruikerscontroller, maar niet voor meer controllers, moet u bij de bovenstaande blauwdrukconfiguratie het volgende sleutel / waarde-paar in de gebruikerscontroller hebben.module.exports = { _config: { actions: true, shortcuts: true, rest: true } }