sails.js
ब्लूप्रिंट एपीआई
खोज…
टिप्पणियों
ब्लूप्रिंट एपीआई कैसे काम करता है?
जब पाल शुरू में sails lift
का उपयोग करना शुरू sails lift
, तो पाल यह देखना चाहता है कि क्या आपके पास कोई नियंत्रक परिभाषित है। हमारे उदाहरण में, हमारे पास एक नियंत्रक है, उपयोगकर्ता नियंत्रक। पाल इस उपयोगकर्ता नियंत्रक के लिए खाका कार्रवाई तक पहुँच प्रदान करता है जैसे कि हमने उन्हें नियंत्रक में स्वयं बनाया था। सर्वर को उठाने के समय पाल स्वचालित रूप से ब्लूप्रिंट मार्ग भी बनाता है। कोई मार्गों में परिभाषित किया गया है इसलिए भले ही /config/routes.js
और कोई कार्रवाई नहीं में परिभाषित किया गया है /api/controllers/UserController.js
स्पष्ट रूप से, सर्वर उठाने के बाद इन सभी मार्गों और कार्यों का उपयोग करने के लिए उपलब्ध हैं।
ब्लूप्रिंट रूट
जब आप सक्षम किए गए ब्लूप्रिंट के साथ sails lift
, तो फ्रेमवर्क आपके नियंत्रकों, मॉडल और कॉन्फ़िगरेशन का निरीक्षण करता है ताकि कुछ मार्गों को स्वचालित रूप से बांध दिया जा सके। ये निहित ब्लूप्रिंट मार्ग आपके एप्लिकेशन को आपके config/routes.js
फ़ाइल में उन मार्गों को मैन्युअल रूप से बाँधने के बिना कुछ अनुरोधों का जवाब देने की अनुमति देते हैं। डिफ़ॉल्ट रूप से, ब्लूप्रिंट रूट उनके संबंधित ब्लूप्रिंट क्रियाओं को इंगित करते हैं , जिनमें से किसी को भी कस्टम कोड के साथ ओवरराइड किया जा सकता है।
Sails में तीन प्रकार के ब्लूप्रिंट मार्ग हैं:
- श्रेष्ठ मार्ग , जहाँ मार्ग हमेशा
/:model/:id?
। जबUser
मॉडल और नियंत्रक को परिभाषित किया जाता है, तो ब्लूप्रिंट Restful मार्गों को निम्नलिखित तरीके से बांधता है -
ये मार्ग मार्ग समान होने पर भी कार्रवाई करने के लिए HTTP क्रिया का उपयोग करते हैं। तो,'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' }
/user
लिए एकPOST
अनुरोध एक नया उपयोगकर्ता बनाएगा,/user/123
लिए एकPUT
अनुरोध प्राथमिक कुंजी 123 के साथ उपयोगकर्ता को अपडेट करेगा और/user/123
कोDELETE
अनुरोध उस उपयोगकर्ता को हटा देगा जिसकी प्राथमिक कुंजी 123 है। एक उत्पादन वातावरण, अनधिकृत पहुंच से बचने के लिए रीस्टफुल मार्गों को आमतौर पर नीतियों द्वारा संरक्षित किया जाना चाहिए।
शॉर्टकट रूट , जहां कार्रवाई करने के लिए मार्ग में एन्कोड किया गया है। हमारे उपयोगकर्ता मॉडल और कंट्रोलर के लिए, चार शॉर्टकट मार्गों का अनुसरण करते हुए बंधे हुए हैं।
'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' }
उदाहरण के लिए,
/user/create?name=joe
शॉर्टकट एक नया उपयोगकर्ता बनाता है, जबकि/user/update/1?name=mike
उपयोगकर्ता # 1 के नाम क्षेत्र को अपडेट करता है। ध्यान दें कि ये मार्ग केवलGET
अनुरोधों का जवाब देते हैं। शॉर्टकट मार्ग विकास के लिए बहुत उपयोगी हैं, लेकिन आम तौर पर उत्पादन के माहौल में अक्षम होना चाहिए। यह उत्पादन में उपयोग करने के लिए डिज़ाइन नहीं किया गया है।एक्शन रूट , जो स्वचालित रूप से आपके कस्टम नियंत्रक कार्यों के लिए मार्ग बनाते हैं। उदाहरण के लिए,
query
को उपयोगकर्ता नियंत्रक में परिभाषित एक कस्टम क्रिया होने दें। फिर निम्नलिखित मार्गों को स्पष्ट रूप से पाल के लिए उपलब्ध होगा -'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' }
यदि अनुरोध
/user/query/:id?
मार्ग तब HTTP क्रिया पर स्वतंत्र कार्रवाई समान होगी। रेस्टफुल और शॉर्टकट मार्गों के विपरीत, एक्शन मार्गों को यह आवश्यक नहीं है कि नियंत्रक के पास एक संबंधित मॉडल फ़ाइल हो। जिसका अर्थ है, यदि आप में एक नियंत्रक को परिभाषित/api/controllers/FooController.js
फ़ाइल लेकिन में कोई मॉडल/api/models/Foo.js
फ़ाइल के बिना, RESTful या के साथ शॉर्टकट मार्ग होगा/foo
लेकिन वहां अभी भी कार्रवाई मार्गों हो जाएगा उपयोग के लिए उपलब्ध।
मार्गों के मिलान का आदेश
जब कोई अनुरोध आता है, तो पाल स्पष्ट रूप से परिभाषित मार्गों के खिलाफ मार्ग से मेल खाएगा। यदि यह मेल खाता है तो आगे कोई मिलान नहीं किया जाता है और इसी क्रिया को निष्पादित किया जाता है। लेकिन अगर यह मेल नहीं खाता है, तो मार्ग का मिलान पहले ब्लूप्रिंट एक्शन मार्गों के खिलाफ किया जाता है, यदि यह मेल नहीं खाता है तो बाकी मार्गों के खिलाफ है और यदि यह या तो शॉर्टकट मार्गों से मेल नहीं खाता है। तो अगर आपकी /config/routes.js
फ़ाइल में निम्नलिखित की तरह कुछ प्रविष्टि /config/routes.js
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
तब आप कार्य करने के लिए query
क्रिया मार्गों की अपेक्षा नहीं कर सकते। क्योंकि के रूप में ही मार्ग query
कार्रवाई मार्ग के खिलाफ मिलान किया जाएगा स्पष्ट रूप से मार्गों को परिभाषित करने और find
उपयोगकर्ता नियंत्रक की कार्रवाई निष्पादित किया जाएगा।
खाका कार्रवाई
ब्लूप्रिंट एक्शन (ब्लूप्रिंट एक्शन रूट्स से भ्रमित न होना) आपके किसी भी नियंत्रक के साथ काम करने के लिए डिज़ाइन की गई जेनेरिक क्रियाएं हैं जिनका एक ही नाम का मॉडल होता है (जैसे ParrotController
को Parrot
मॉडल की आवश्यकता होगी)। उन्हें अपने आवेदन के लिए डिफ़ॉल्ट व्यवहार के रूप में सोचें। उदाहरण के लिए, यदि आप एक है User.js
मॉडल और एक खाली UserController.js
नियंत्रक, find
, create
, update
, destroy
, populate
, add
और remove
कार्यों परोक्ष मौजूद हैं, आप उन्हें लिखने के लिए बिना।
डिफ़ॉल्ट रूप से, ब्लूप्रिंट Restful मार्ग और शॉर्टकट मार्ग उनके संबंधित ब्लूप्रिंट क्रियाओं से बंधे होते हैं। हालाँकि, किसी विशेष नियंत्रक के लिए उस नियंत्रक फ़ाइल (जैसे कि ParrotController.find
) में एक कस्टम क्रिया बनाकर किसी भी ब्लूप्रिंट कार्रवाई को ओवरराइड किया जा सकता है। वैकल्पिक रूप से, आप अपने स्वयं के कस्टम खाका कार्रवाई बनाकर अपने ऐप में हर जगह ब्लूप्रिंट कार्रवाई को ओवरराइड कर सकते हैं।
निम्नलिखित खाका कार्यों के साथ जहाज भेजते हैं:
- खोज
- ढूँढो एक
- सृजन करना
- अपडेट करें
- नष्ट
- आबाद करना
- जोड़ना
- हटाना
ब्लूप्रिंट रूट को अक्षम करना
वैश्विक आधार : ब्लूप्रिंट एपीआई कॉन्फ़िगरेशन को
/config/blueprint.js
फ़ाइल में परिभाषित किया गया है। आप वहाँ से सभी नियंत्रकों के लिए सभी तीन प्रकार के ब्लूप्रिंट मार्गों को सक्षम या अक्षम कर सकते हैं। उदाहरण के लिए, यदि आप अपने सभी नियंत्रकों के लिए ब्लूप्रिंट शॉर्टकट मार्गों को अक्षम करना चाहते हैं, लेकिन कार्रवाई और बाकी मार्गों को सक्षम रखना चाहते हैं, तो आपका/config/blueprint.js
इस तरह होना चाहिए -module.exports.blueprints = { action: true, rest: true, shortcut: false }
प्रति-नियंत्रक आधार पर: आप से किसी भी सेटिंग को भी पार कर जाते
/config/blueprints.js
अपने नियंत्रक defintion में एक '_config' कुंजी को परिभाषित करने, और यह सेटिंग्स के लिए ओवरराइड के साथ एक विन्यास वस्तु बताए द्वारा एक प्रति नियंत्रक आधार पर इस फाइल में। उदाहरण के लिए यदि आप शॉर्टकट मार्ग को केवल अपने उपयोगकर्ता नियंत्रक के लिए सक्षम करना चाहते हैं, लेकिन किसी भी अधिक नियंत्रकों के लिए नहीं है, तो उपरोक्त ब्लूप्रिंट कॉन्फ़िगरेशन के साथ आपको उपयोगकर्ता नियंत्रक में मुख्य मूल्य युग्म का पालन करना होगा।module.exports = { _config: { actions: true, shortcuts: true, rest: true } }