JavaScript नीति

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

यह क्या है

इस नीति से आपको कस्टम JavaScript कोड जोड़ने की सुविधा मिलती है, जो एपीआई प्रॉक्सी फ़्लो के संदर्भ में काम करता है. आपके कस्टम JavaScript कोड में, Apigee Edge के JavaScript ऑब्जेक्ट मॉडल के ऑब्जेक्ट, तरीके, और प्रॉपर्टी इस्तेमाल किए जा सकते हैं. ऑब्जेक्ट मॉडल की मदद से, प्रॉक्सी फ़्लो के कॉन्टेक्स्ट में वैरिएबल पाए जा सकते हैं, उन्हें सेट किया जा सकता है, और हटाया जा सकता है. आप ऑब्जेक्ट मॉडल के साथ दिए गए कुछ बुनियादी क्रिप्टोग्राफ़िक फ़ंक्शन भी इस्तेमाल कर सकते हैं.

इसके बारे में जानकारी

JavaScript की नीति को कई तरीकों से इस्तेमाल किया जा सकता है. उदाहरण के लिए, आपके पास फ़्लो वैरिएबल पाने और उन्हें सेट करने, पसंद के मुताबिक लॉजिक लागू करने, और गड़बड़ी ठीक करने, अनुरोधों या रिस्पॉन्स से डेटा निकालने, और डाइनैमिक तौर पर बैकएंड टारगेट यूआरएल में बदलाव करने जैसे कई दूसरे काम हो सकते हैं. इस नीति से, अपनी पसंद के मुताबिक ऐसी कार्रवाइयां की जा सकती हैं जो Edge की किसी भी अन्य स्टैंडर्ड नीतियों के दायरे में नहीं आतीं. असल में, अन्य नीतियों में लागू किए गए उसी तरह के कई व्यवहार पाने के लिए, JavaScript नीति का इस्तेमाल किया जा सकता है. जैसे, AssignmentsMessage और ExtractVariable.

हम JavaScript की नीति में, इस्तेमाल के एक ऐसे उदाहरण का सुझाव नहीं देते जिसमें लॉग करना शामिल है. Splunk, Sumo, और Loggly जैसे तीसरे पक्ष के लॉगिंग प्लैटफ़ॉर्म में लॉग इन करने के लिए, मैसेज लॉग करने की नीति सबसे बेहतर है. साथ ही, PostClientFlow में मैसेज लॉग करने की नीति लागू करके, एपीआई प्रॉक्सी की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है, जो क्लाइंट को जवाब वापस भेजने के बाद काम करती है.

JavaScript की नीति की मदद से, आपको उन JavaScript सोर्स फ़ाइल को एक्ज़ीक्यूट करने के लिए, तय करने की सुविधा मिलती है या <Source> एलिमेंट की मदद से, सीधे नीति के कॉन्फ़िगरेशन में JavaScript कोड शामिल किया जा सकता है. दोनों ही तरीकों से, JavaScript कोड उस चरण को पूरा करता है जिस पर नीति अटैच की गई है. सोर्स फ़ाइल के विकल्प के लिए, सोर्स कोड को हमेशा प्रॉक्सी बंडल में एक स्टैंडर्ड जगह पर सेव किया जाता है: apiproxy/resources/jsc. इसके अलावा, आपके पास सोर्स कोड को एनवायरमेंट या संगठन के लेवल पर, किसी रिसॉर्स फ़ाइल में सेव करने का विकल्प भी होता है. निर्देशों के लिए, संसाधन फ़ाइलें देखें. आपके पास Apigee यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर से भी, अपनी JavaScript अपलोड करने का विकल्प है.

JavaScript सोर्स फ़ाइलों में हमेशा एक .js एक्सटेंशन होना चाहिए.

JavaScript के मौजूदा वर्शन के लिए काम करने वाले सॉफ़्टवेयर और इस्तेमाल करने वाले वर्शन देखें.

वीडियो

JavaScript नीति का इस्तेमाल करके, कस्टम नीति एक्सटेंशन बनाने का तरीका जानने के लिए यह छोटा वीडियो देखें.

सैंपल

टारगेट यूआरएल फिर से लिखें

यहां इस्तेमाल का एक सामान्य उदाहरण दिया गया है: अनुरोध के मुख्य हिस्से से डेटा निकालना, उसे फ़्लो वैरिएबल में स्टोर करना, और उस फ़्लो वैरिएबल को प्रॉक्सी फ़्लो में कहीं और इस्तेमाल करना. मान लें कि आपका एक ऐसा ऐप्लिकेशन है जहां उपयोगकर्ता, एचटीएमएल फ़ॉर्म में अपना नाम डालकर उसे सबमिट करता है. आपकी इच्छा है कि एपीआई प्रॉक्सी, फ़ॉर्म का डेटा एक्सट्रैक्ट करे और उसे डाइनैमिक तरीके से, बैकएंड सेवा को कॉल करने वाले यूआरएल में जोड़े. JavsScript नीति में ऐसा कैसे किया जाएगा?

ध्यान दें: इस उदाहरण को आज़माने के लिए, हम मान लेते हैं कि आपने प्रॉक्सी एडिटर में नई प्रॉक्सी बनाई है. जब आप इसे बना लें, तो इसे http://www.example.com का बैकएंड सेवा यूआरएल दें. इस उदाहरण के लिए, हम बैकएंड यूआरएल को डाइनैमिक तरीके से दोबारा लिखेंगे. अगर आपको नया प्रॉक्सी बनाने का तरीका नहीं पता है, तो शुरू करने का ट्यूटोरियल देखें. .

  1. Edge यूज़र इंटरफ़ेस (यूआई) में, वह प्रॉक्सी खोलें जिसे आपने प्रॉक्सी एडिटर में बनाया है.
  2. डेवलप करें टैब चुनें.
  3. नए मेन्यू से, नई स्क्रिप्ट चुनें.
  4. डायलॉग में, JavaScript चुनें और स्क्रिप्ट को कोई नाम दें, जैसे कि js-example.
  5. इस कोड को कोड एडिटर में चिपकाएं और प्रॉक्सी सेव करें. इस पर ध्यान देने वाली अहम चीज़ context ऑब्जेक्ट है. यह ऑब्जेक्ट, JavaScript कोड के साथ प्रॉक्सी फ़्लो में कहीं भी उपलब्ध है. इसका इस्तेमाल फ़्लो के हिसाब से कॉन्सटेंट हासिल करने, काम के 'पाएं/सेट करें' वाले तरीकों को कॉल करने, और ज़्यादा कार्रवाइयों के लिए किया जाता है. ऑब्जेक्ट का यह हिस्सा Edge के JavaScript ऑब्जेक्ट मॉडल का है. यह भी ध्यान रखें कि target.url फ़्लो वैरिएबल एक बिल्ट-इन, रीड/राइट वैरिएबल होता है, जिसे टारगेट अनुरोध फ़्लो में ऐक्सेस किया जा सकता है. जब हम उस वैरिएबल को एपीआई यूआरएल के साथ सेट करते हैं, तो Edge उस यूआरएल पर अपना बैकएंड कॉल करता है. हमने मूल टारगेट यूआरएल को फिर से लिखा है, जो प्रॉक्सी बनाते समय आपने जो भी बताया था वह दोबारा लिखा गया है (उदाहरण के लिए, http://www.example.com).

    if (context.flow=="PROXY_REQ_FLOW") {
         var username = context.getVariable("request.formparam.user");
         context.setVariable("info.username", username);
    }
    
    
    if (context.flow=="TARGET_REQ_FLOW") {
         context.setVariable("request.verb", "GET");
         var name = context.getVariable("info.username");
         var url = "http://mocktarget.apigee.net/"
         context.setVariable("target.url", url + "?user=" + name);
    }
    
  6. नई नीति के मेन्यू से, JavaScript चुनें.
  7. नीति को कोई नाम दें, जैसे कि target-rewrite. डिफ़ॉल्ट को स्वीकार करें और नीति सेव करें.
  8. अगर आपने नेविगेटर में प्रॉक्सी एंडपॉइंट प्रीफ़्लो को चुना है, तो आपको दिखेगा कि नीति उस फ़्लो में जोड़ दी गई है.
  9. नेविगेटर में, टारगेट एंडपॉइंट PreFlow आइकॉन चुनें.
  10. नेविगेटर से, JavaScript नीति को फ़्लो एडिटर में टारगेट एंडपॉइंट के अनुरोध साइड में खींचें और छोड़ें.
  11. सेव करें।
  12. अपने संगठन का सही नाम और प्रॉक्सी नाम को सही तरीके से बदलकर, एपीआई को इस तरह का कॉल करें:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example

आखिरी बात, आइए इस उदाहरण में इस्तेमाल की गई JavaScript नीति की एक्सएमएल परिभाषा के बारे में देखते हैं. ध्यान देने वाली बात यह है कि <ResourceURL> एलिमेंट का इस्तेमाल, JavaScript सोर्स फ़ाइल को चलाने के लिए तय करने के लिए किया जाता है. इसी पैटर्न का इस्तेमाल सभी JavaScript सोर्स फ़ाइल के लिए किया जाता है: jsc://filename.js. अगर आपके JavaScript कोड को शामिल करना ज़रूरी है, तो ऐसा करने के लिए एक या उससे ज़्यादा <IncludeURL> एलिमेंट का इस्तेमाल किया जा सकता है. जैसा कि इस रेफ़रंस में बाद में बताया गया है.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="target-rewrite">
    <DisplayName>target-rewrite</DisplayName>
    <Properties/>
    <ResourceURL>jsc://js-example.js</ResourceURL>
</Javascript>

JavaScript से प्रॉपर्टी का मान वापस पाएं

कॉन्फ़िगरेशन में <Property> एलिमेंट जोड़ा जा सकता है. इसके बाद, रनटाइम के दौरान JavaScript की मदद से, एलिमेंट की वैल्यू फिर से हासिल की जा सकती है.

JavaScript कोड की मदद से प्रॉपर्टी को ऐक्सेस करने के लिए, एलिमेंट के name एट्रिब्यूट का इस्तेमाल करें. <Property> एलिमेंट की वैल्यू (ओपनिंग और क्लोज़िंग टैग के बीच की वैल्यू), वह लिटरल वैल्यू है जो JavaScript को मिलेगी.

JavaScript में, नीति प्रॉपर्टी की वैल्यू को फिर से पाने के लिए, उसे Properties ऑब्जेक्ट की प्रॉपर्टी के तौर पर ऐक्सेस किया जाता है, जैसा कि यहां दिखाया गया है:

  • प्रॉपर्टी कॉन्फ़िगर करें. यहां, प्रॉपर्टी की वैल्यू, वैरिएबल का नाम response.status.code है.
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavascriptURLRewrite">
        <DisplayName>JavascriptURLRewrite</DisplayName>
        <Properties>
            <Property name="source">response.status.code</Property>
        </Properties>
        <ResourceURL>jsc://JavascriptURLRewrite.js</ResourceURL>
    </Javascript>
    
  • JavaScript की मदद से प्रॉपर्टी वापस पाएं. यहां, वापस मिली वैल्यू -- वैरिएबल का नाम -- का इस्तेमाल करके, getVariable फ़ंक्शन वैरिएबल की वैल्यू फिर से हासिल करता है.
    var responseCode = properties.source; // Returns "response.status.code"
    var value = context.getVariable(responseCode); // Get the value of response.status.code
    context.setVariable("response.header.x-target-response-code", value);
    

हैंडलिंग के दौरान होने वाली गड़बड़ियां

JavaScript कॉलआउट में इस्तेमाल की जा सकने वाली गड़बड़ियों को ठीक करने के तरीकों के उदाहरण और चर्चा के लिए, Apigee समुदाय में यह पोस्ट देखें. Apigee समुदाय में दिए जाने वाले सुझाव, सिर्फ़ जानकारी के लिए दिए जाते हैं. यह ज़रूरी नहीं है कि Apigee के सुझाए गए सबसे सही तरीके दिखें.


एलिमेंट का रेफ़रंस

एलिमेंट रेफ़रंस, JavaScript की नीति के एलिमेंट और एट्रिब्यूट के बारे में बताता है.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Javascript async="false" 
        continueOnError="false" enabled="true" timeLimit="200" 
        name="JavaScript-1">
    <DisplayName>JavaScript 1</DisplayName>
    <Properties>
        <Property name="propName">propertyValue</Property>
    </Properties>
    <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
    </SSLInfo>
    <IncludeURL>jsc://a-javascript-library-file</IncludeURL>
    <ResourceURL>jsc://my-javascript-source-file</ResourceURL>
    <Source>insert_js_code_here</Source>

</Javascript>

<Javascript> एट्रिब्यूट

<Javascript name="Javascript-1" enabled="true" continueOnError="false" async="false" timeLimit="200">

ये एट्रिब्यूट इस नीति के लिए खास हैं.

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
timeLimit

वह ज़्यादा से ज़्यादा समय (मिलीसेकंड में) बताता है जिसे स्क्रिप्ट को चलाने की अनुमति है. उदाहरण के लिए, अगर 200 मि॰से॰ की सीमा पार हो जाती है, तो नीति में यह गड़बड़ी दिखेगी: Javascript.policy_name failed with error: Javascript runtime exceeded limit of 200ms.

ध्यान दें: मुफ़्त में आज़माने की सुविधा वाले खातों के लिए, प्लान लागू होने की अवधि 200 मि॰से॰ तक सीमित है.

लागू नहीं ज़रूरी है

इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
name

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू में अक्षर, संख्याएं, स्पेस, हाइफ़न, अंडरस्कोर, और पीरियड शामिल किए जा सकते हैं. इस वैल्यू में 255 से ज़्यादा वर्ण नहीं हो सकते.

इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, <DisplayName> एलिमेंट का इस्तेमाल करें.

लागू नहीं ज़रूरी है
continueOnError

इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
enabled

नीति लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. अगर यह नीति किसी फ़्लो से जुड़ी हुई है, तब भी उसे लागू नहीं किया जाएगा.

सही ज़रूरी नहीं
async

यह एट्रिब्यूट अब काम नहीं करता.

false बहिष्कृत

<DisplayName> एलिमेंट

मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name एट्रिब्यूट का इस्तेमाल करें.

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के name एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है.

मौजूदगी ज़रूरी नहीं
Type String

<IncludeURL> एलिमेंट

यह JavaScript लाइब्रेरी फ़ाइल तय करता है, जिसे <ResourceURL> या <Source> एलिमेंट के साथ तय की गई मुख्य JavaScript फ़ाइल पर डिपेंडेंसी के तौर पर लोड किया जाता है. स्क्रिप्ट का आकलन उसी क्रम में किया जाएगा जिस क्रम में उन्हें नीति में शामिल किया गया है. आपका कोड, JavaScript ऑब्जेक्ट मॉडल के ऑब्जेक्ट, तरीके, और प्रॉपर्टी इस्तेमाल कर सकता है.

अतिरिक्त <IncludeURL> एलिमेंट के साथ एक से ज़्यादा JavaScript डिपेंडेंसी रिसॉर्स शामिल करें.

<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: ज़रूरी नहीं
टाइप: String

उदाहरण

सैंपल सेक्शन में सामान्य उदाहरण देखें.

<प्रॉपर्टी> एलिमेंट

इस नीति से ऐसी प्रॉपर्टी के बारे में पता चलता है जिसे JavaScript कोड की मदद से, रनटाइम के दौरान ऐक्सेस किया जा सकता है.

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: ज़रूरी नहीं
टाइप: String

एट्रिब्यूट

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
नाम

प्रॉपर्टी का नाम बताता है.

लागू नहीं ज़रूरी है.

उदाहरण

सैंपल सेक्शन में उदाहरण देखें.

<ResourceURL> एलिमेंट

एपीआई फ़्लो में काम करने वाली मुख्य JavaScript फ़ाइल के बारे में बताता है. आपके पास इस फ़ाइल को एपीआई प्रॉक्सी स्कोप (एपीआई प्रॉक्सी बंडल में /apiproxy/resources/jsc के तहत या एपीआई प्रॉक्सी एडिटर के नेविगेटर पैनल के स्क्रिप्ट सेक्शन में) में सेव करने का विकल्प है. इसके अलावा, संसाधन फ़ाइलों में बताए गए तरीके से, संगठन या एक से ज़्यादा एपीआई प्रॉक्सी में फिर से इस्तेमाल करने के लिए, संगठन या एनवायरमेंट के दायरे में इस फ़ाइल को सेव किया जा सकता है. आपका कोड, JavaScript ऑब्जेक्ट मॉडल के ऑब्जेक्ट, तरीके, और प्रॉपर्टी इस्तेमाल कर सकता है.

<ResourceURL>jsc://my-javascript.js</ResourceURL>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: <ResourceURL> या <Source> ज़रूरी है. अगर <ResourceURL> और <Source>, दोनों मौजूद हैं, तो <ResourceURL> को अनदेखा कर दिया जाता है.
टाइप: String

उदाहरण

सैंपल सेक्शन में सामान्य उदाहरण देखें.

<सोर्स> एलिमेंट

इस सुविधा से, आपको नीति के एक्सएमएल कॉन्फ़िगरेशन में सीधे तौर पर JavaScript डालने की अनुमति मिलती है. डाला गया JavaScript कोड तब काम करता है, जब एपीआई फ़्लो में नीति लागू होती है.

डिफ़ॉल्ट: कभी नहीं
मौजूदगी: <ResourceURL> या <Source> ज़रूरी है. अगर <ResourceURL> और <Source>, दोनों मौजूद हैं, तो <ResourceURL> को अनदेखा कर दिया जाता है.
टाइप: String

उदाहरण

<Javascript name='JS-ParseJsonHeaderFullString' timeLimit='200' >
  <Properties>
    <Property name='inboundHeaderName'>specialheader</Property>
    <Property name='outboundVariableName'>json_stringified</Property>
  </Properties>
  <Source>
var varname = 'request.header.' + properties.inboundHeaderName + '.values.string';
var h = context.getVariable(varname);
if (h) {
  h = JSON.parse(h);
  h.augmented = (new Date()).valueOf();
  var v = JSON.stringify(h, null, 2) + '\n';
  // further indent
  var r = new RegExp('^(\S*)','mg');
  v= v.replace(r,'    $1');
  context.setVariable(properties.outboundVariableName, v);
}
  </Source>
</Javascript>

<SSLInfo> एलिमेंट

इस नीति से, JavaScript की नीति से बनाए गए सभी एचटीटीपी क्लाइंट इंस्टेंस के लिए, TLS को कॉन्फ़िगर करने में इस्तेमाल होने वाली प्रॉपर्टी के बारे में जानकारी मिलती है.

    <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
    </SSLInfo>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: ज़रूरी नहीं
टाइप: String

किसी एचटीटीपी क्लाइंट के लिए TLS को कॉन्फ़िगर करने की प्रोसेस, वही प्रोसेस है जिसका इस्तेमाल TLS को किसी TargetEndpoint/TargetServer के लिए कॉन्फ़िगर करने के लिए किया जाता है. ज़्यादा जानकारी के लिए, एजेड से बैकएंड में TLS को कॉन्फ़िगर करना देखें.

इस्तेमाल की जानकारी

JavaScript की नीति में कोई असल कोड नहीं है. इसके बजाय, JavaScript की नीति में JavaScript के 'संसाधन' का रेफ़रंस दिया जाता है. साथ ही, एपीआई फ़्लो में उस चरण के बारे में बताया जाता है जहां JavaScript लागू होता है. मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर से स्क्रिप्ट अपलोड की जा सकती है या उसे एपीआई प्रॉक्सी प्रॉक्सी की /resources/jsc डायरेक्ट्री में शामिल किया जा सकता है, जिसे आपने स्थानीय तौर पर डेवलप किया है.

JavaScript के नीति कोड को डीबग करना

ट्रेस टूल के ट्रांज़ैक्शन आउटपुट पैनल में डीबग करने की जानकारी को आउटपुट करने के लिए, print() फ़ंक्शन का इस्तेमाल करें. जानकारी और उदाहरणों के लिए, JavaScript print() स्टेटमेंट की मदद से डीबग करें.

ट्रेस में प्रिंट स्टेटमेंट देखने के लिए:

  1. ट्रेस टूल खोलें और उस प्रॉक्सी के लिए ट्रेस सेशन शुरू करें जिसमें आपकी JavaScript नीति है.
  2. प्रॉक्सी को कॉल करें.
  3. ट्रेस टूल में, आउटपुट पैनल खोलने के लिए, सभी लेन-देन से आउटपुट पर क्लिक करें.

  4. आपके प्रिंट स्टेटमेंट इस पैनल में दिखेंगे.

ट्रेस टूल में डीबग की जानकारी आउटपुट करने के लिए, Print() फ़ंक्शन का इस्तेमाल किया जा सकता है. यह फ़ंक्शन सीधे JavaScript ऑब्जेक्ट मॉडल के ज़रिए उपलब्ध है. ज़्यादा जानकारी के लिए, "print() स्टेटमेंट की मदद से JavaScript को डीबग करना" देखें.

फ़्लो वैरिएबल

यह नीति, डिफ़ॉल्ट रूप से किसी भी वैरिएबल को पॉप्युलेट नहीं करती. हालांकि, कॉन्टेक्स्ट ऑब्जेक्ट पर तरीकों को कॉल करके, अपने JavaScript कोड में फ़्लो वैरिएबल सेट किए जा सकते हैं और पाए जा सकते हैं. एक सामान्य पैटर्न ऐसा दिखता है:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"))

कॉन्टेक्स्ट ऑब्जेक्ट, Apigee Edge के JavaScript ऑब्जेक्ट मॉडल का हिस्सा है.

गड़बड़ी का रेफ़रंस

इस सेक्शन में गड़बड़ी के कोड और दिखाए गए गड़बड़ी के मैसेज के बारे में बताया गया है. साथ ही, इस नीति के ट्रिगर होने पर Edge की मदद से सेट किए गए गड़बड़ी वाले वैरिएबल के बारे में बताया गया है. यह जानकारी जानना ज़रूरी है कि क्या आप गड़बड़ियों को ठीक करने के लिए, गड़बड़ी से जुड़े नियम बना रहे हैं. ज़्यादा जानने के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी और गड़बड़ियों को ठीक करने के तरीके देखें.

रनटाइम से जुड़ी गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी का कोड एचटीटीपी कोड स्थिति वजह समाधान
steps.javascript.ScriptExecutionFailed 500 JavaScript की नीति के चालू होने पर, कई तरह की Script दूसरी तरह की गड़बड़ियां हो सकती हैं. आम तौर पर, दिखाई देने वाली गड़बड़ियों में RangeError, ReferenceError, SyntaxError, TypeError, और URIError शामिल हैं.
steps.javascript.ScriptExecutionFailedLineNumber 500 JavaScript कोड में कोई गड़बड़ी हुई. ज़्यादा जानकारी के लिए, गड़बड़ी वाली स्ट्रिंग देखें. लागू नहीं
steps.javascript.ScriptSecurityError 500 JavaScript चलाने के दौरान, सुरक्षा से जुड़ी कोई गड़बड़ी हुई. ज़्यादा जानकारी के लिए, गड़बड़ी वाली स्ट्रिंग देखें. लागू नहीं

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम वजह समाधान
InvalidResourceUrlFormat अगर JavaScript नीति के <ResourceURL> या <IncludeURL> एलिमेंट में दिए गए रिसॉर्स यूआरएल का फ़ॉर्मैट अमान्य है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.
InvalidResourceUrlReference अगर <ResourceURL> या <IncludeURL> एलिमेंट ऐसी JavaScript फ़ाइल के बारे में बताते हैं जो मौजूद नहीं है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता. रेफ़र की गई सोर्स फ़ाइल, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर मौजूद होनी चाहिए.
WrongResourceType डिप्लॉयमेंट के दौरान यह गड़बड़ी तब होती है, जब JavaScript की नीति के <ResourceURL> या <IncludeURL> एलिमेंट, jsc (JavaScript फ़ाइल) के अलावा, किसी भी तरह के संसाधन का हवाला देते हों.
NoResourceURLOrSource अगर <ResourceURL> एलिमेंट का एलान नहीं किया गया है या इस एलिमेंट में रिसॉर्स यूआरएल की जानकारी नहीं दी गई है, तो इस गड़बड़ी के साथ JavaScript नीति को डिप्लॉय नहीं किया जा सकता. <ResourceURL> एलिमेंट एक ज़रूरी एलिमेंट है. इसके अलावा, <IncludeURL> एलिमेंट का एलान किया गया है, लेकिन इस एलिमेंट में रिसॉर्स यूआरएल के बारे में नहीं बताया गया है. <IncludeURL> एलिमेंट ज़रूरी नहीं है, लेकिन अगर इसका एलान किया गया है, तो रिसॉर्स यूआरएल का <IncludeURL> एलिमेंट में होना ज़रूरी है.

गड़बड़ी वाले वैरिएबल

ये वैरिएबल तब सेट किए जाते हैं, जब यह नीति रनटाइम के दौरान कोई गड़बड़ी ट्रिगर करती है. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.

वैरिएबल जगह उदाहरण
fault.name="fault_name" fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. fault.name Matches "ScriptExecutionFailed"
javascript.policy_name.failed policy_name, उस नीति का उपयोगकर्ता तय किया गया नाम है जिसकी वजह से गड़बड़ी हुई है. javascript.JavaScript-1.failed = true

गड़बड़ी के जवाब का उदाहरण

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"",
    "detail": {
      "errorcode": "steps.javascript.ScriptExecutionFailed"
    }
  }
}

गड़बड़ी के नियम का उदाहरण

<FaultRule name="JavaScript Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition>
    </Step>
    <Condition>(javascript.JavaScript-1.failed = true) </Condition>
</FaultRule>

स्कीमा

हर तरह की नीति को एक्सएमएल स्कीमा (.xsd) से तय किया जाता है. रेफ़रंस के लिए, नीति के स्कीमा GitHub पर उपलब्ध हैं.

मिलते-जुलते विषय

Apigee समुदाय के लेख

आपको इन मिलते-जुलते लेख, Apigee कम्यूनिटी पर मिल सकते हैं: