นโยบาย JavaScript

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

อะไร

นโยบายนี้ให้คุณเพิ่มโค้ด JavaScript ที่กำหนดเองซึ่งทำงานภายในบริบทของ API ได้ โฟลว์พร็อกซี ในโค้ด JavaScript ที่กำหนดเอง คุณสามารถใช้ออบเจ็กต์ เมธอด และคุณสมบัติของ โมเดลออบเจ็กต์ JavaScript ของ Apigee Edge โมเดลออบเจ็กต์ช่วยให้คุณรับ ตั้งค่า และนำออกได้ ในบริบทโฟลว์พร็อกซีได้ คุณ นอกจากนี้ยังใช้ฟังก์ชันวิทยาการเข้ารหัสพื้นฐานที่มีให้กับโมเดลออบเจ็กต์ได้ด้วย

เกี่ยวกับ

นโยบาย JavaScript มีกรณีการใช้งานมากมาย เช่น คุณสามารถรับและตั้งค่าขั้นตอน ดำเนินการตรรกะที่กำหนดเองและดำเนินการจัดการความผิดพลาด ดึงข้อมูลจากคำขอ หรือ การตอบกลับ แก้ไข URL เป้าหมายแบ็กเอนด์แบบไดนามิก และอีกมากมาย นโยบายนี้ช่วยให้คุณดำเนินการต่อไปนี้ได้ ใช้ลักษณะการทำงานที่กำหนดเองซึ่งไม่อยู่ภายใต้นโยบาย Edge มาตรฐานอื่นๆ จริงๆ แล้ว คุณ สามารถใช้นโยบาย JavaScript เพื่อบรรลุลักษณะการทำงานที่เหมือนกันหลายอย่างซึ่งนโยบายอื่นใช้ เช่น AssignMessage และ ExtractVariable

Use Case หนึ่งที่เราไม่แนะนําสําหรับนโยบาย JavaScript คือการบันทึก นโยบายการบันทึกข้อความมีประโยชน์มาก เหมาะกับการบันทึกเข้าสู่แพลตฟอร์มการบันทึกข้อมูลของบุคคลที่สาม เช่น Splunk, Sumo และ Loggly และ คุณสามารถปรับปรุงประสิทธิภาพของพร็อกซี API ด้วยการบังคับใช้นโยบายการบันทึกข้อความใน PostClientFlow ซึ่งทำงานหลังจากส่งการตอบกลับไปยังไคลเอ็นต์แล้ว

นโยบาย JavaScript ให้คุณระบุไฟล์ต้นฉบับ JavaScript ที่จะดำเนินการหรือ คุณจะรวมโค้ด JavaScript ได้โดยตรงในการกำหนดค่าของนโยบายด้วย <Source> ไม่ว่าจะใช้วิธีใด โค้ด JavaScript จะทำงานเมื่อขั้นตอนที่แนบนโยบายทำงาน สำหรับตัวเลือกไฟล์ต้นฉบับ ซอร์สโค้ดจะเก็บอยู่ใน ตำแหน่งมาตรฐานภายในแพ็กเกจพร็อกซี: apiproxy/resources/jsc หรือคุณสามารถ จัดเก็บซอร์สโค้ดในไฟล์ทรัพยากรที่ระดับสภาพแวดล้อมหรือองค์กร สำหรับ โปรดดูวิธีการที่หัวข้อไฟล์ทรัพยากร คุณสามารถ ให้อัปโหลด JavaScript ผ่านตัวแก้ไขพร็อกซี UI ของ Apigee

ไฟล์ต้นฉบับของ JavaScript ต้องมีส่วนขยาย .js เสมอ

ดูซอฟต์แวร์และเวอร์ชันที่รองรับ สำหรับ JavaScript เวอร์ชันที่รองรับในปัจจุบัน

วิดีโอ

ดูวิดีโอสั้นๆ เพื่อดูวิธีสร้างส่วนขยายนโยบายที่กำหนดเองโดยใช้ JavaScript

ตัวอย่าง

เขียน URL เป้าหมายใหม่

นี่คือกรณีการใช้งานทั่วไป: การดึงข้อมูลจากเนื้อหาของคำขอ เพื่อจัดเก็บไว้ในโฟลว์ และใช้ตัวแปรโฟลว์นั้นในตำแหน่งอื่นของโฟลว์พร็อกซี สมมติว่าคุณมีแอป ซึ่งผู้ใช้ป้อนชื่อในแบบฟอร์ม HTML แล้วส่งไป คุณต้องการให้พร็อกซี API แยกข้อมูลแบบฟอร์มและเพิ่มลงใน URL ที่ใช้เรียกใช้บริการแบ็กเอนด์แบบไดนามิก อย่างไร คุณจะทำสิ่งนี้ในนโยบาย JavsScript ไหม

หมายเหตุ: หากคุณต้องการลองดูตัวอย่างนี้ เราจะถือว่าคุณได้สร้าง ในตัวแก้ไขพร็อกซี เมื่อคุณสร้าง URL เพียงให้ URL บริการแบ็กเอนด์ของ: http://www.example.com สำหรับตัวอย่างนี้ เราจะเขียน URL ของแบ็กเอนด์ใหม่แบบไดนามิก หากไม่ทราบวิธีสร้างพร็อกซีใหม่ ให้ดูบทแนะนำการเริ่มต้นใช้งาน

  1. ใน Edge UI ให้เปิดพร็อกซีที่คุณสร้างไว้ในเครื่องมือแก้ไขพร็อกซี
  2. เลือกแท็บพัฒนา
  3. จากเมนู "ใหม่" ให้เลือก New Script
  4. ในกล่องโต้ตอบ ให้เลือก JavaScript และตั้งชื่อสคริปต์ เช่น js-example
  5. วางโค้ดต่อไปนี้ในเครื่องมือแก้ไขโค้ด และบันทึกพร็อกซี สิ่งสำคัญในการ คือออบเจ็กต์ context ออบเจ็กต์นี้พร้อมใช้งานในโค้ด JavaScript ที่ใดก็ได้ในขั้นตอนพร็อกซี ซึ่งใช้เพื่อรับค่าคงที่ที่เจาะจงของโฟลว์ เพื่อเรียกใช้ วิธีการรับ/ตั้งค่า และสำหรับการดำเนินการเพิ่มเติม ส่วนออบเจ็กต์นี้เป็นของ Edge โมเดลออบเจ็กต์ JavaScript หมายเหตุ นอกจากนี้ ตัวแปรโฟลว์ target.url เป็นตัวแปรแบบอ่าน/เขียนที่ติดตั้งมาในตัว จะเข้าถึงได้ในโฟลว์คำขอเป้าหมาย เมื่อเราตั้งค่าตัวแปรนั้นด้วย URL ของ API แล้ว Edge จะเรียกแบ็กเอนด์ไปยัง URL นั้น เราได้เขียน URL เป้าหมายเดิมใหม่ ซึ่งก็คือค่าใดก็ตามที่คุณระบุเมื่อสร้างพร็อกซี (เช่น 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. หากเลือก Endpoint Preflow สำหรับปลายทางพร็อกซีใน Navigator คุณจะเห็นว่านโยบาย เพิ่มลงในขั้นตอนนั้น
  9. ใน Navigator ให้เลือกไอคอน Target Endpoint PreFlow
  10. จาก Navigator ให้ลากนโยบาย JavaScript ไปไว้บนด้าน "Request" ของเป้าหมาย ปลายทางในเครื่องมือแก้ไขโฟลว์
  11. บันทึก
  12. เรียกใช้ API ในลักษณะนี้ โดยแทนที่ชื่อองค์กรและชื่อพร็อกซีที่ถูกต้องเป็น เหมาะสม:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example

สุดท้ายนี้ เรามาดูการกำหนด XML สำหรับนโยบาย JavaScript ที่ใช้ใน ในตัวอย่างนี้ สิ่งสำคัญที่ควรทราบคือ <ResourceURL> ที่ใช้เพื่อระบุไฟล์ต้นฉบับ JavaScript ที่จะดำเนินการ ใช้รูปแบบเดียวกันนี้ สำหรับไฟล์ต้นฉบับ JavaScript: jsc://filename.js หากเป็นโค้ด JavaScript ต้องมีการรวม คุณสามารถใช้องค์ประกอบ <IncludeURL> อย่างน้อย 1 รายการเพื่อดำเนินการ ตามที่อธิบายไว้ภายหลังในการอ้างอิงนี้

<?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 ขณะรันไทม์

ใช้แอตทริบิวต์ name ขององค์ประกอบเพื่อระบุชื่อที่จะใช้เข้าถึง จากโค้ด JavaScript ค่าขององค์ประกอบ <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>

&lt;Javascript&gt; ลักษณะ

<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> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

&lt;IncludeURL&gt; องค์ประกอบ

ระบุไฟล์ไลบรารี JavaScript ที่จะโหลดเป็นทรัพยากร Dependency สำหรับไฟล์ JavaScript หลัก ที่ระบุด้วยองค์ประกอบ <ResourceURL> หรือ <Source> สคริปต์จะได้รับการประเมินใน เพื่อเรียงลำดับในการระบุไว้ในนโยบาย โค้ดสามารถใช้ออบเจ็กต์ วิธีการ และ ของโมเดลออบเจ็กต์ JavaScript

รวมทรัพยากร Dependency ของ JavaScript มากกว่า 1 รายการพร้อมด้วยข้อมูลเพิ่มเติม องค์ประกอบ <IncludeURL>

<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: สตริง

ตัวอย่าง

ดูตัวอย่างพื้นฐานในส่วนตัวอย่าง

&lt;Property&gt; องค์ประกอบ

ระบุพร็อพเพอร์ตี้ที่คุณเข้าถึงได้จากโค้ด JavaScript ขณะรันไทม์

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ระบุชื่อพร็อพเพอร์ตี้

ไม่มี ต้องระบุ

ตัวอย่าง

ดูตัวอย่างในส่วนตัวอย่าง

&lt;ResourceURL&gt; องค์ประกอบ

ระบุไฟล์ JavaScript หลักที่จะทำงานในโฟลว์ API คุณจัดเก็บไฟล์นี้ได้ ที่ขอบเขตพร็อกซี API (ภายใต้ /apiproxy/resources/jsc ในแพ็กเกจพร็อกซี API หรือใน ส่วนสคริปต์ในบานหน้าต่างนำทางของเครื่องมือแก้ไขพร็อกซี API) หรือที่องค์กร หรือ ขอบเขตของสภาพแวดล้อมสำหรับการใช้งานซ้ำในพร็อกซี API หลายรายการ ตามที่อธิบายไว้ในไฟล์ทรัพยากร โค้ดสามารถใช้ออบเจ็กต์ และพร็อพเพอร์ตี้ของโมเดลออบเจ็กต์ JavaScript

<ResourceURL>jsc://my-javascript.js</ResourceURL>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ <ResourceURL> หรือ <Source> ถ้า ทั้ง <ResourceURL> และ <Source> ต่างก็ไม่สนใจ <ResourceURL>
ประเภท: สตริง

ตัวอย่าง

ดูตัวอย่างพื้นฐานในส่วนตัวอย่าง

&lt;Source&gt; องค์ประกอบ

อนุญาตให้คุณแทรก JavaScript ลงในการกำหนดค่า XML ของนโยบายโดยตรง ได้แทรก โค้ด JavaScript จะทำงานเมื่อนโยบายทำงานในโฟลว์ API

ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ <ResourceURL> หรือ <Source> ถ้า ทั้ง <ResourceURL> และ <Source> ต่างก็ไม่สนใจ <ResourceURL>
ประเภท: สตริง

ตัวอย่าง

<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>

&lt;SSLInfo&gt; องค์ประกอบ

ระบุพร็อพเพอร์ตี้ที่ใช้กำหนดค่า TLS สำหรับอินสแตนซ์ไคลเอ็นต์ HTTP ทั้งหมดที่สร้างโดย นโยบาย JavaScript

    <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
    </SSLInfo>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: สตริง

ขั้นตอนการกำหนดค่า TLS สำหรับไคลเอ็นต์ HTTP เป็นกระบวนการเดียวกับที่คุณใช้กำหนดค่า TLS สำหรับ TargetEndpoint/TargetServer ดูการกำหนดค่า TLS จาก Edge ไปยังแบ็กเอนด์ เพื่อดูข้อมูลเพิ่มเติม

หมายเหตุการใช้งาน

นโยบาย JavaScript จะไม่มีโค้ดจริง แต่นโยบาย JavaScript อ้างอิง "resource" ของ JavaScript และกำหนดขั้นตอนในโฟลว์ API ที่ JavaScript ประมวลผล คุณสามารถ อัปโหลดสคริปต์ของคุณผ่านตัวแก้ไขพร็อกซี UI การจัดการ หรือคุณสามารถรวมสคริปต์นั้นไว้ใน ไดเรกทอรี /resources/jsc ในพร็อกซี API ที่คุณพัฒนาในเครื่อง

การแก้ไขข้อบกพร่องของโค้ดนโยบาย JavaScript

ใช้ฟังก์ชัน print() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องไปยังธุรกรรม แผงเอาต์พุตในเครื่องมือติดตาม ดูรายละเอียดและตัวอย่างได้ที่ "แก้ไขข้อบกพร่องด้วย JavaScript" print()

วิธีดูใบแจ้งยอดการพิมพ์ในการติดตาม

  1. เปิดเครื่องมือการติดตามและเริ่มเซสชันการติดตามสำหรับพร็อกซีที่มี JavaScript ของคุณ
  2. โทรหาพร็อกซี
  3. ในเครื่องมือการติดตาม ให้คลิกเอาต์พุตจากธุรกรรมทั้งหมดเพื่อเปิดเอาต์พุต แผง

  4. ใบแจ้งยอดการพิมพ์จะปรากฏในแผงนี้

คุณสามารถใช้ฟังก์ชัน Print() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องไปยังเครื่องมือติดตาม ฟังก์ชันนี้ใช้ได้โดยตรง ผ่านโมเดลออบเจ็กต์ JavaScript โปรดดูรายละเอียดที่ "ดีบัก JavaScript ด้วยprint() "

ตัวแปรโฟลว์

นโยบายนี้ไม่เติมค่าตัวแปรโดยค่าเริ่มต้น แต่คุณสามารถตั้งค่า (และรับ) ขั้นตอน ตัวแปรในโค้ด JavaScript โดยเรียกใช้เมธอดในออบเจ็กต์บริบท รูปแบบทั่วไป ซึ่งมีลักษณะดังนี้

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

ออบเจ็กต์บริบทเป็นส่วนหนึ่งของโมเดลออบเจ็กต์ JavaScript ของ Apigee Edge

ข้อมูลอ้างอิงข้อผิดพลาด

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.javascript.ScriptExecutionFailed 500 The JavaScript policy can throw many different types of ScriptExecutionFailed errors. Commonly seen types of errors include RangeError, ReferenceError, SyntaxError, TypeError, and URIError.
steps.javascript.ScriptExecutionFailedLineNumber 500 An error occurred in the JavaScript code. See the fault string for details. N/A
steps.javascript.ScriptSecurityError 500 A security error occurred when the JavaScript executed. See the fault string for details. N/A

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidResourceUrlFormat If the format of the resource URL specified within the <ResourceURL> or the <IncludeURL> element of the JavaScript policy is invalid, then the deployment of the API proxy fails.
InvalidResourceUrlReference If the <ResourceURL> or the <IncludeURL> elements refer to a JavaScript file that does not exist, then the deployment of the API proxy fails. The referenced source file must exist either the API proxy, environment, or organization level.
WrongResourceType This error occurs during deployment if the <ResourceURL> or the <IncludeURL> elements of the JavaScript policy refer to any resource type other than jsc (JavaScript file).
NoResourceURLOrSource The deployment of the JavaScript policy can fail with this error if the <ResourceURL> element is not declared or if the resource URL is not defined within this element. <ResourceURL> element is a mandatory element. Or, The <IncludeURL> element is declared but the resource URL is not defined within this element. The <IncludeURL> element is optional but if declared, the resource URL must be specified within the <IncludeURL> element.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "ScriptExecutionFailed"
javascript.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. javascript.JavaScript-1.failed = true

Example error response

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

Example fault rule

<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>

สคีมา

นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) สคีมานโยบายสำหรับใช้อ้างอิง ที่มีอยู่ใน GitHub

หัวข้อที่เกี่ยวข้อง

บทความเกี่ยวกับชุมชน Apigee

คุณสามารถค้นหาบทความที่เกี่ยวข้องเหล่านี้ได้ใน Apigee ชุมชน: