นโยบาย 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

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

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่ส่งกลับและตัวแปรข้อบกพร่อง ที่ Edge กำหนดไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้สำคัญที่ควรทราบ หากคุณพัฒนากฎความผิด จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
steps.javascript.ScriptExecutionFailed 500 นโยบาย JavaScript สามารถแสดงข้อผิดพลาด ScriptExecutionFailed ประเภทต่างๆ ได้ พบได้ทั่วไป ประเภทข้อผิดพลาดที่เห็น ได้แก่ RangeError ReferenceError, SyntaxError TypeError และ URIError
steps.javascript.ScriptExecutionFailedLineNumber 500 เกิดข้อผิดพลาดในโค้ด JavaScript ดูรายละเอียดจากสตริงข้อผิดพลาด ไม่มี
steps.javascript.ScriptSecurityError 500 เกิดข้อผิดพลาดด้านความปลอดภัยขณะเรียกใช้ JavaScript ดูสตริงข้อผิดพลาดสำหรับ รายละเอียด ไม่มี

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidResourceUrlFormat หากรูปแบบของ URL ทรัพยากรที่ระบุภายในองค์ประกอบ <ResourceURL> หรือ <IncludeURL> ของนโยบาย JavaScript ไม่ถูกต้อง การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว
InvalidResourceUrlReference หากองค์ประกอบ <ResourceURL> หรือ <IncludeURL> อ้างอิงไฟล์ JavaScript ที่ไม่มีอยู่ การติดตั้งใช้งานพร็อกซี API จะล้มเหลว ไฟล์แหล่งที่มาที่อ้างอิงต้องมีอยู่ในพร็อกซี API, สภาพแวดล้อม หรือองค์กร
WrongResourceType ข้อผิดพลาดนี้เกิดขึ้นระหว่างการทำให้ใช้งานได้หาก <ResourceURL> หรือ <IncludeURL> องค์ประกอบของนโยบาย JavaScript หมายถึงประเภททรัพยากรใดๆ ที่ไม่ใช่ jsc (ไฟล์ JavaScript)
NoResourceURLOrSource การทำให้นโยบาย JavaScript ใช้งานได้อาจล้มเหลวด้วยข้อผิดพลาดนี้ หาก <ResourceURL> ไม่มีการประกาศองค์ประกอบ หรือไม่มีการระบุ URL ทรัพยากรภายในองค์ประกอบนี้ องค์ประกอบ <ResourceURL> เป็นองค์ประกอบที่จำเป็น หรือประกาศเอลิเมนต์ <IncludeURL> แต่ URL ของทรัพยากรไม่ได้กำหนดไว้ภายในองค์ประกอบนี้ องค์ประกอบ <IncludeURL> เป็นค่าที่ไม่บังคับ แต่หากมีการประกาศไว้ คุณต้องระบุ URL ทรัพยากรภายในองค์ประกอบ <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>

สคีมา

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

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

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

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